I made a restful API which produces JSON format output (@Produces(MediaType.APPLICATION_JSON)). This is working as expected when the status is Created or Ok. But whenever I send output bad request with some error message in JSON format. I'm not receiving the expected JSON result with error message instead of that I'm receiving something like "Unexpected 'B'" when i use postman for testing. If I use soapui for testing it is giving result in Xml.
These are the annotations I have used for my method
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("sample")
These are responses im sending based on request
return Response
.status(Status.BAD_REQUEST)
.type(MediaType.APPLICATION_JSON)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", " POST")
.entity(JsonResponse)
.build();
return Response
.status(Status.UNAUTHORIZED)
.type(MediaType.APPLICATION_JSON)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", " POST")
.entity(JsonResponse)
.build();
return Response
.status(Status.CREATED)
.type(MediaType.APPLICATION_JSON)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST")
.entity(JsonResponse)
.build();
I have problem only when the return type is Other than Status created.
This is my object mapper class
private static final ObjectMapper MAPPER = new ObjectMapper();
static
{
MAPPER.setSerializationInclusion(Include.ALWAYS);
MAPPER.disable(MapperFeature.USE_GETTERS_AS_SETTERS);
MAPPER.configure(SerializationFeature.WRAP_ROOT_VALUE, true); //in response
MAPPER.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);//in request
}
public ObjectMapperProvider()
{
System.out.println("Instantiate ObjectMapperProvider");
}
@Override
public ObjectMapper getContext(Class<?> arg0)
{
return MAPPER;
}
I have used following response type in postman
This is the result I got for above request. Im expecting a json format output
This result im seeing in soapUi in XML format
This result im seeing in SoapUi in json format
This is the response Im seeing when I sent 401 status code with error message in XML Format but im sending in JSON format.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.
</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica,
sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-
family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-
top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header">
<h1>Server Error</h1>
</div>
<div id="content">
<div class="content-container">
<fieldset>
<h2>401 - Unauthorized: Access is denied due to invalid
credentials.</h2>
<h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
</fieldset>
</div>
</div>
</body>
</html>
If you need any other information let me know.