((coerce/coercer {:a {:b s/Str :c s/Int}} coerce/json-coercion-matcher) {:a {:b nil :c "1"}})#schema.utils.ErrorContainer{:error {:a {:b (not (instance? java.lang.String nil)), :c (not (integer? "1"))}}}
{:a {:b nil :c 1}}"...how to properly integrate Schema into a REST API"
just wrote a spec-guide for the new reitit routing library: https://metosin.github.io/reitit/ring/coercion.html
If you want to use compojure, you could check out compojure-api, https://github.com/metosin/compojure-api.
Neither does the two-pass validation, but report also the original value on error. Two sweeps would mean twice as slow.