Estoy usando Jersey para proporcionar un servicio REST de Java al mundo exterior. Ofrezco algunas funciones que toman JSON y uso el marco de Jackson en combinación con Jersey para convertirlos en POJO.Jersey/Jackson Excepción de problema con ExceptionMapper
Tengo el problema de que si el formato de jackson incorrecto se envía al servidor, la respuesta (contenido de la respuesta http) es una descripción de excepción específica de jackson. Si tengo un POJO con un "apellido" de atributo y envío "sursname" en la cadena JSON al servidor, me sale:
Unrecognized field "sursname" (Class XY), not marked as ignorable at [Source: [email protected]; line: 1, column: 49] (through reference chain: XY["sursname"])
Eso es bastante bien, pero me gustaría tener mi propio contenido de la respuesta, por ejemplo mi propio código de error. Ya escribí ExceptionMapper personalizado que debe asignar todos los Throwables.
@Provider
public class WebserviceExceptionMapper implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Exception e) {
e.printStackTrace();
return Response.status(400).entity("{\"errorcode\":\"CRITICAL_ERROR\"}").type(MediaType.APPLICATION_JSON).build();
}
}
Parece que la excepción Jackson se lanza antes de llamar a mi método de servicio web, así que no tienen ninguna posibilidad de hacer un mapa?
¿Alguien tiene una idea? Muchas gracias y perdón por mi inglés;)
Me acabo de pasar bastante tiempo con este problema, leer muchas discusiones al respecto, sobre todo mencionar exceptionmappers. Finalmente tropecé con su respuesta, que es la única que encontré que explica el problema correctamente, por qué los mapeadores de excepciones no siempre funcionan y tienen una solución simple. ¡Gracias! Debe ser el mercado como respuesta aceptada. – patman
¡La mejor respuesta de todas! Registrar solo JacksonJsonProvider.class funciona para mí, pero no JacksonJaxbJsonProvider.class. Esta realmente debería ser la respuesta aceptada. – wolf97084