Java – prevent Tomcat from interfering with Jersey / jax-rs 2 response body on HTTP error status 4xx or 5xx

I have the following stack of a rest API

> Jersey 2 / JAX RS 2.0 > Tomcat 7.0. 47 > Jackson 2

My goal is to have a custom response body when an error occurs I want to be able to send an explanation to the client for easier debugging

First, I tried to use @ context httpservletresponse and set the HTTP status code there, but Jersey ignored it (this is normal behavior, but it is beyond my understanding)

Then I try to use a webapplicationexception like this:

@GET
@Path("/myapi")
public BaseResponse getSomething() {
   BaseResponse b = new BaseResponse();
   if(error) {
      b.setStatusDescription("reason for error");
      throw new WebApplicationException(Response.status(Response.Status.CONFLICT).entity(b).build());
   }
   //add content to BaseReponse
   return b
}

But Tomcat's reward to me is as follows:

<html>
    <head>
        <title>Apache Tomcat/7.0.47 - Error report</title>
        <style>
            <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22p

Which standard Tomcat HTML output is limited by the context length of the response body I want to return (. Entity (b) – the length of B) So it's recognized, but Tomcat just overwrites it with its own error page

As a side note, I also try to return the response with the same result:

return Response.status(Response.Status.CONFLICT).entity(b).build()

So how can I tell Tomcat to let me pass my answer alone?

Solution

Just add the following code to the configuration of resourceconfig class

property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR,"true");

See Jersey config. server. response. setStatusOverSendError

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>