Quando estamos utilizando serviços rest em Java com JAX-RS (Jersey ou RESTeasy, ou ainda outra implementação), os retornos de erro http que não são lançados pela aplicação podem vir com mensagens variadas no corpo da requisição, mensagens essas que muitas das vezes não queremos que seja enviado ao cliente, já que podem ser incompreensíveis e até mesmo ter detalhes de implementação que não desejamos que o cliente saiba.
Para alterar essas mensagens padrão no JAX-RS é simples. Basta implementar a interface ExceptionMapper e anotar a classe com @Provider. No exemplo abaixo iremos implementar o mapeamento para a mensagem 404, para que seja apresentada a mensagem “Endpoint não existe”.
@Provider
public class Mapper implements ExceptionMapper<NotFoundException>
{
@Override
public Response toResponse(NotFoundException exception)
{
return Response.status(Response.Status.NOT_FOUND).entity("Endpoint não existe.")
.build();
}
}
Mensagem de erro 404 antes da implementação da classe ExceptionMapper
Mensagem de erro 404 depois da implementação da classe ExceptionMapper
Apesar de o exemplo ter sido para o 404, você pode fazer o mesmo para quaisquer códigos de erro. Além disso também é possível utilizar a mesma abordagem para alterar o código de erro http a ser retornado. Se por exemplo eu quisesse retornar o erro 500 nesse caso (esse exemplo talvez não faça sentido, mas é apenas para mostrar que é possível), bastaria alterar o código para o código para o seguinte:
@Provider
public class Mapper implements ExceptionMapper<NotFoundException>
{
@Override
public Response toResponse(NotFoundException exception)
{
return Response.status(Response.Status.NOT_FOUND).entity("Endpoint não existe.")
.build();
}
}