Sine está desigining una API REST, que necesita para crear su propio Pojo (aka. Recursos) que representará el comportamiento o errores de validación impares, según lo declarado por horaceman. Te mostraré cómo lo hacemos en nuestra aplicación.
Dado que estamos utilizando JSON como una representación de datos, deseamos recibir la siguiente información si ocurre una excepción inesperada.
{ "status" : "EXCEPTION", "exceptionName" : "MyCustomException", "exceptionMsg" : "ex.unsupportedOperation" }
Esto es un ejemplo, por supuesto. Una buena solución al respecto es que podemos tratar exceptionMsg
como una clave en nuestra interfaz para mostrar el mensaje i18n
o mostrarlo al usuario tal como está (en este caso, utilizamos mensajes más descriptivos).
Ahora, cuando todo está bien que hacer algo como esto:
{ "status" : "OK", "data" : {(...)} }
Data
elemento es opcional. Podemos enviar lo que necesitemos para notificar al frontend, o saltearlo por completo.
El último escenario sería suyo - errores de validación. En este caso enviamos generalmente siguiente contenido:
{ "status" : "VALIDATION_FAILED", "errors" : [ "fieldName" : "username", "errorCode" : "validation.requiredField", "errorMsg" : "Username is required."] }
tan claramente clientes API recibirán información que la validación ha fallado y en los campos apropiados - detalles exactos sobre lo que salió mal. Por supuesto, errors
es una matriz (o List
), por lo que siempre proporcionamos tantos detalles como sea necesario.
¿Cómo lo hago? Fácil, esos objetos son POJOS simples que se traducen a JSON usando Jackson. Esto me da posibilidades ilimitadas de representación JSON. Lo que hago es preparar un POJO que represente errores de Validación (por ejemplo) y agregarlo como Model
a mi instancia ModelAndView
. Entonces solo confío en Spring para hacer los cálculos JSON correctos.
En su caso tiene la anotación @ResponseBody
con su instancia Post
, por lo que yo sé, no podrá hacerlo. Su configuración dice: "Bueno, pase lo que pase, siempre devuelva una instancia de publicación". Lo que debe hacer es reemplazarlo por simple ModelAndView
, suministrarlo con Model
según la validación y devolverlo a la API del cliente.
¿Está diseñando API o manejando Formulario? –
Estoy diseñando una API REST. –