Java Dropwizard Response.status(Response.status.NOT_FOUND).build()返回html
如果真正缺少资源,我的API将返回以下内容Java Dropwizard Response.status(Response.status.NOT_FOUND).build()返回html,java,jersey,dropwizard,Java,Jersey,Dropwizard,如果真正缺少资源,我的API将返回以下内容 { "code": 404, "message": "HTTP 404 Not Found" } 当我使用代码Response.status(Response.status.NOT\u FOUND).build()通过我的资源返回404时,我得到以下HTML作为响应 <html> <head> <meta http-equiv=&quo
{
"code": 404,
"message": "HTTP 404 Not Found"
}
当我使用代码Response.status(Response.status.NOT\u FOUND).build()通过我的资源返回404时,我得到以下HTML作为响应
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Error 404 Not Found</title>
</head>
<body>
<h2>HTTP ERROR 404 Not Found</h2>
<table>
<tr>
<th>URI:</th>
<td>/v1/2/1/100</td>
</tr>
<tr>
<th>STATUS:</th>
<td>404</td>
</tr>
<tr>
<th>MESSAGE:</th>
<td>Not Found</td>
</tr>
<tr>
<th>SERVLET:</th>
<td>io.dropwizard.jersey.setup.JerseyServletContainer-21c99abf</td>
</tr>
</table>
</body>
</html>
找不到错误404
找不到HTTP错误404
URI:
/v1/2/1/100
地位:
404
信息:
找不到
SERVLET:
io.dropwizard.jersey.setup.JerseyServletContainer-21c99abf
我正在试图找出如何阻止此意外HTML并在没有数据的情况下进行响应。我们遇到了相同的问题,并通过将.entity(…)
设置为空字符串解决了此问题:
Response.status(NOT_FOUND).entity("").type(MediaType.APPLICATION_JSON).build()
由于这是一种黑客行为,我也渴望了解更清洁的解决方案……;) 将Jersey属性设置为true
environment.jersey()
.property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true);
只要响应状态为4xx或5xx,就可以在容器特定的响应
实现上选择发送错误
或设置状态
。例如,在servlet容器上,Jersey可以调用HttpServletResponse.setStatus(…)
或HttpServletResponse.sendError(…)
调用sendError(…)
方法通常会重置实体、响应头并为指定的状态代码提供错误页面(例如servleterror page
configuration)。但是,如果您想对响应进行后期处理(例如,通过servlet过滤器),唯一的方法是对容器响应对象调用setStatus(…)
如果属性值为true
则方法Response.setStatus(…)
将用于默认的Response.sendError(…)
属性值的类型为布尔值
。默认值为false
配置属性的名称是“jersey.config.server.response.setStatusOverSendError”
这就是我要找的。工作得很有魅力。没有黑客。谢谢
public static final String RESPONSE_SET_STATUS_OVER_SEND_ERROR