diff --git a/backend/src/app/http/errors.clj b/backend/src/app/http/errors.clj index 803c72bee..9e27ce9f1 100644 --- a/backend/src/app/http/errors.clj +++ b/backend/src/app/http/errors.clj @@ -61,8 +61,15 @@ (defmethod handle-exception :validation [err _] - (let [edata (ex-data err)] - {:status 400 :body (dissoc edata ::s/problems ::s/value)})) + (let [data (ex-data err) + explain (binding [s/*explain-out* expound/printer] + (with-out-str + (s/explain-out (update data ::s/problems #(take 10 %)))))] + {:status 400 + :body (-> data + (dissoc ::s/problems) + (dissoc ::s/value) + (assoc :explain explain))})) (defmethod handle-exception :assertion [error request] diff --git a/common/src/app/common/spec.cljc b/common/src/app/common/spec.cljc index 61688c426..85c4a6912 100644 --- a/common/src/app/common/spec.cljc +++ b/common/src/app/common/spec.cljc @@ -257,7 +257,7 @@ (let [data (s/explain-data spec data)] (throw (ex/error :type :validation :code :spec-validation - ::s/problems (::s/problems data))))) + ::ex/data data)))) result)) (defmacro instrument! diff --git a/frontend/src/app/main/errors.cljs b/frontend/src/app/main/errors.cljs index 194ff90c1..ce0a0eb5e 100644 --- a/frontend/src/app/main/errors.cljs +++ b/frontend/src/app/main/errors.cljs @@ -81,7 +81,13 @@ (js/console.group "Validation Error:") (ex/ignoring (js/console.info - (with-out-str (pprint error)))) + (with-out-str (pprint (dissoc error :explain))))) + + (when-let [explain (:explain error)] + (js/console.group "Spec explain:") + (js/console.log explain) + (js/console.groupEnd "Spec explain:")) + (js/console.groupEnd "Validation Error:"))