Con mi servicio JAX-RS muy simple, estoy usando Tomcat con el dominio JDBC para la autenticación, por lo tanto, estoy trabajando con las anotaciones JSR 250.Respuesta de estado HTTP personalizada con JAX-RS (Jersey) y @RolesAllowed
Lo que pasa es que quiero devolver un cuerpo de mensaje personalizado en la respuesta de estado HTTP. El código de estado (403) debe permanecer igual. Por ejemplo, mi servicio tiene el siguiente aspecto:
@RolesAllowed({ "ADMIN" })
@Path("/users")
public class UsersService {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public String getUsers() {
// get users ...
return ...;
}
}
Si un usuario con una función diferente de "admin" acceder al servicio, quiero cambiar el mensaje de respuesta a algo así (dependiendo del tipo de medio [ XML/JSON]):
<error id="100">
<message>Not allowed.</message>
</error>
Por el momento Jersey devuelve el siguiente cuerpo:
HTTP Status 403 - Forbidden
type Status report
message Forbidden
description Access to the specified resource (Forbidden) has been forbidden.
Apache Tomcat/7.0.12
¿Cómo puedo cambiar el cuerpo del mensaje por defecto? ¿Hay alguna forma de manejar la excepción (tal vez lanzada) para construir mi propia respuesta de estado HTTP?
Un ejemplo completo: https://www.bhaveshthaker.com/25/customize-handling-server-side-exceptions-with-error-codes-using-exceptionmapper-with-jersey-jax-rs-in-java/ – RAS