CXF/ JAX-RS : Return Custom response from interceptor

前端 未结 2 420
忘了有多久
忘了有多久 2021-01-02 07:21

We need to return custom error code and error message when exception occurs during REST invocation. We have created a exception mapper provider, it works well for the except

相关标签:
2条回答
  • 2021-01-02 07:55

    I raised a similar question on the cxf user group, see:

    http://cxf.547215.n5.nabble.com/Handling-exceptions-in-a-JAX-RS-fault-interceptor-when-using-Local-Transport-td5733958.html

    I ended up replacing my interceptors with ContainerRequestFilter and ContainerResponseFilter and then the Exception Mapper happily handled both application exceptions and exceptions thrown from the Filter.

    Hope this helps.

    0 讨论(0)
  • 2021-01-02 08:22

    I found a way to send a custom response from the interceptor but still can't figure out a way to call my CustomExceptionHandler from the interceptor

    Code:

    public void handleMessage(Message message) {
    
            MetadataMap<String, String> metadataMap = (MetadataMap<String, String>) message.get("jaxrs.template.parameters");
    
            if(null != metadataMap) {
                List<String> list = metadataMap.get("phoneNumber");
                if(null != list) {
                    String phoneNumber = list.get(0);
                    boolean result = validatePhoneNumber(phoneNumber);
                    if(!result){
    // Create a response object and set it in the message. 
    // calling getExchange() will not call your service
                        Response response = Response
                    .status(Response.Status.BAD_REQUEST)
                    .entity(new ErrorDetail(Response.Status.BAD_REQUEST.getStatusCode(), Response.Status.BAD_REQUEST.toString()))
                    .build();
            message.getExchange().put(Response.class, response);
    // That's it
                    }
                } else {
                    Response response = Response
                    .status(Response.Status.BAD_REQUEST)
                    .entity(new ErrorDetail(Response.Status.BAD_REQUEST.getStatusCode(), Response.Status.BAD_REQUEST.toString()))
                    .build();
            message.getExchange().put(Response.class, response);
                }
            } else {
                Response response = Response
                    .status(Response.Status.BAD_REQUEST)
                    .entity(new ErrorDetail(Response.Status.BAD_REQUEST.getStatusCode(), Response.Status.BAD_REQUEST.toString()))
                    .build();
            message.getExchange().put(Response.class, response);
            }
        }
    
    0 讨论(0)
提交回复
热议问题