estoy usando procesamiento integrada Jackson de Jersey para transformar JSON entrante a un POJO, por ejemplo:Jersey: Volviendo 400 error en lugar de 500 cuando se administra petición no válida cuerpo
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response newCustomer(CustomerRepresentation customer)
{
...
}
Si un cliente envía JSON con campos no válidos Jersey actualmente devuelve un 500 Internal Server Error
. En su lugar, me gustaría devolver un 400 Bad Request
, preferiblemente con algún detalle significativo que indique qué campos son erróneos.
¿Alguna idea de cómo se podría lograr esto? (Por lo menos el retorno de una genérica 400 en lugar de la totalmente inadecuada 500?)
Actualización: Aquí está la excepción que se genera en el servidor, antes de que mi controlador se invoca:
javax.servlet.ServletException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException:
Unrecognized field "this_isnt_a_known"_field" (Class com.redacted....), not marked as ignorable
'400' en realidad significa 'Solicitud incorrecta ', es decir, el servidor cree que el cliente ha enviado una solicitud incorrecta. Así que, semánticamente, no se ajusta a lo que quieres lograr. –
Gracias por tomar mi resbalón. Tenía la intención de escribir "Solicitud incorrecta". Pregunta editada en consecuencia. – HolySamosa
Jersey generalmente devuelve 400 si el cuerpo de la solicitud no es válido. ¿Estás seguro de que no falla en el cuerpo de tu método con un NPE o algo así? ¿Ves algún error y/o rastro de pila en los registros de tu servidor de aplicaciones? – TheArchitect