java - 当我们发送 BAD Request 状态作为输出时,Resful APi 输出正在从 JSON 更改为 XML
问题描述
我制作了一个生成 JSON 格式输出 (@Produces(MediaType.APPLICATION_JSON)) 的宁静 API。当状态为 Created 或 Ok 时,这将按预期工作。但是每当我发送带有 JSON 格式错误消息的输出错误请求时。当我使用邮递员进行测试时,我没有收到带有错误消息的预期 JSON 结果,而不是收到类似“Unexpected 'B'”的信息。如果我使用soapui 进行测试,它会给出Xml 的结果。
这些是我用于我的方法的注释
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("sample")
这些是我根据请求发送的响应
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();
只有当返回类型不是创建状态时我才有问题。
这是我的对象映射器类
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;
}
这是我在以 XML 格式发送带有错误消息的 401 状态代码但我以 JSON 格式发送时看到的响应。
<!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>
如果您需要任何其他信息,请告诉我。
解决方案
推荐阅读
- assembly - 找到一个有效的移位/加法/LEA指令序列来乘以给定的常数(避免MUL/IMUL)
- iis - Host.net 核心应用程序不工作 - 此页面无法显示
- python - 如何在保持效率和应用程序完整性的同时防止重复的数据库条目?
- javascript - 大家好,updateList 函数的 if 语句是如何工作的?
- swift - mainStoryboard instantiateViewController 显示问题 - Swift
- c# - Microsoft Bot 框架 - Facebook 集成 - 网络框架
- python - 使用 Pandas 系列更新 DataFrame 行
- python - 可以在管理页面之外使用 Django 管理列表/小部件吗?
- java - 如何跳过异常完成的期货
- javascript - 为什么传单地图图块排序错误