user16655
user16655

Reputation: 1941

Return exception from JAX-RS Rest Service as JSON

Is it in some way possible that an exception thrown from a rest service is returned as JSON? I have a JAX-RS Rest Service where I would like to achieve this. When I throw it now, it's mapped to an HTML response, which is not what i want. From what I have understood an ExceptionMapper will also map it to HTML? Is there any other alternative or libraries that allows the exception to be returned in JSON format?

Upvotes: 1

Views: 6432

Answers (4)

Justinas Jakavonis
Justinas Jakavonis

Reputation: 8798

It will respond as JSON.

@Provider
@Singleton
public class ExceptionMapperProvider implements ExceptionMapper<Exception>
{

    @Override
    public Response toResponse(final Exception exception)
    {
            return Response.status(HttpStatusCodes.STATUS_CODE_SERVER_ERROR).entity(new BasicResponse(InternalStatus.UNHANDLED_EXCEPTION, exception.getMessage())).type(MediaType.APPLICATION_JSON).build();    
    }
}

@XmlRootElement
public class BasicResponse {

    public String internalStatus;

    public String message;

    public BasicResponse() {}

    public BasicResponse(String internalStatus, String message){
        this.internalStatus = internalStatus;
        this.message = message;
    }
}

Upvotes: 5

vaibhav patil
vaibhav patil

Reputation: 143

You can create custom exception,It takes JSON request and response

    @POST
    @Path("/betRequest")
    @Consumes({ "application/json", "application/x-www-form-urlencoded" })
    @Produces({ "application/json", "application/x-www-form-urlencoded" })
    public Response getBetRequest(String betRequestParams, @Context HttpServletRequest request) 
    {
      BetResponseDetails  betResponseDetails = new BetResponseDetails();
      try{
           //you code here
          }
      catch (JSONException ex) 
         {
            ex.printStackTrace();
            betResponseDetails.setResponseCode("9002");//your custom error code
            betResponseDetails.setResponseStatus("Bad Request");//custom status
            betResponseDetails.setResponseMessage("The request body contained invalid JSON");//custom error massage
            return Response.status(200).entity(betResponseDetails).build();
        }
     }

Create One POJO BetResponseDetails

public class BetResponseDetails {
    private String ResponseStatus;
    private String ResponseCode;
    private String ResponseMessage;

  // getter/setter
 .......
}

Upvotes: 2

dneranjan
dneranjan

Reputation: 136

get the response data in a structure with status and data, if the status is error, show the correct message. you can try this way

{
"status": "error",
"data": {
    "message": "information of error message"
}

}

Upvotes: 0

Ji aSH
Ji aSH

Reputation: 3457

catch your exceptions, then build a response object in a standardized format such as

error: {
    code: 'XXX',
    status: HTTPStatus,
    message: 'my error message'
}

And send it as a response with an error status (from Response.Status, usually 4xx or 5xx)

Upvotes: -1

Related Questions