Estoy aprendiendo JAX-RS (también conocido como JSR-311) usando Jersey. exitosamente He creado un recurso de raíz y estoy jugando con los parámetros:JAX-RS/Jersey ¿cómo personalizar el manejo de errores?
@Path("/hello")
public class HelloWorldResource {
@GET
@Produces("text/html")
public String get(
@QueryParam("name") String name,
@QueryParam("birthDate") Date birthDate) {
// Return a greeting with the name and age
}
}
Esto funciona muy bien, y se ocupa de cualquier formato en la localidad actual que es entendido por la fecha (String) constructor (como AAAA/mm/dd y mm/dd/YYYY). Pero si proporciono un valor que no es válido o no lo entiendo, recibo una respuesta 404.
Por ejemplo:
GET /hello?name=Mark&birthDate=X
404 Not Found
¿Cómo puedo personalizar este comportamiento? Tal vez un código de respuesta diferente (probablemente "400 Bad Request")? ¿Qué hay de registrar un error? ¿Tal vez añadir una descripción del problema ("formato de fecha incorrecta") en un encabezado personalizado para ayudar a solucionar problemas? ¿O devolver una respuesta de error completa con detalles, junto con un código de estado 5xx?
En su ejemplo, la llamada a super() debe ser ligeramente diferente:.. super (Response.Status (Status.UNAUTHORIZED) entidad (mensaje) .type ("text/plain") construir()); Gracias por la comprensión sin embargo. –
Creo que el método no se ejecutará en su ejemplo. – deamon
En el escenario mencionado en la pregunta, no tendrá la oportunidad de lanzar una excepción, ya que Jersey levantará una excepción ya que no podrá crear una instancia del objeto Date desde el valor de entrada. ¿Hay alguna manera de interceptar la excepción de Jersey? Hay una interfaz ExceptionMapper, pero que también intercepta las excepciones arrojadas por el método (en este caso, consiga). –