Catch all Exceptions and also return custom Errors in Jersey

前端 未结 1 1722
刺人心
刺人心 2020-12-01 12:35

I want to catch all unexpected Exceptions in a jersey rest service. Therefore i wrote an ExceptionMapper:

@Provider
public class ExceptionMapper implements j         


        
相关标签:
1条回答
  • 2020-12-01 13:12

    WebApplicationException has a getResponse from which we can get the Response. So you can check for a WebApplicationException in your mapper. Maybe something like

    @Override
    public Response toResponse(Throwable error) {
        Response response;
        if (error instanceof WebApplicationException) {
            WebApplicationException webEx = (WebApplicationException)error;
            response = webEx.getResponse();
        } else {
            response = Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                    .entity("Internal error").type("text/plain").build();
        }
        return response;
    }
    

    That way an instance of WebApplicationException thrown will just return the default response. This will actually handle some other exceptions also, not thrown explictly by your application. WebApplicationException has a few other exception under its hierarchy that are thrown by JAX-RS, for which predefined response/status codes are wrapped.

    Exception                      Status code    Description
    -------------------------------------------------------------------------------
    BadRequestException            400            Malformed message
    NotAuthorizedException         401            Authentication failure
    ForbiddenException             403            Not permitted to access
    NotFoundException              404            Couldn’t find resource
    NotAllowedException            405            HTTP method not supported
    NotAcceptableException         406            Client media type requested 
                                                                not supported
    NotSupportedException          415            Client posted media type 
                                                                not supported
    InternalServerErrorException   500            General server error
    ServiceUnavailableException    503            Server is temporarily unavailable 
                                                                or busy
    

    That being said, we could explicitly throw any of these exceptions in our code, just to give it more semantic value.

    Generally speaking though, the example above may be unnecessary, unless you want to alter the response message/status code, as one can from the table above, the hierarchy of exceptions already have some general mapping. And in most cases, unexpected exceptions will already be mapped to InternalServerErrorException

    0 讨论(0)
提交回复
热议问题