当我使用404
响应代码时,Dropwizard会返回自定义HTML代码(即使Accept
标题等于application/json
)。
控制器方法:
if (o == null) {
return Response.status(Response.Status.NOT_FOUND).build();
} else {
return Response.ok(o).build();
}
Dropwizard回复:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 404 Not Found</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /abc/1. Reason:
<pre> Not Found</pre></p><br/>
<br/>
...
</body>
</html>
如何为404
,503
响应代码(等)自定义返回正文以返回JSON?
PS
我已经实现了自定义异常映射器。但我不想为此任务使用例外
答案 0 :(得分:5)
您应该使用响应构建器的类型和实体方法。
类似的东西:
return Response
.status(Response.Status.NOT_FOUND)
.type(MediaType.APPLICATION_JSON_TYPE)
.entity(error).build();
其中错误可序列化为json。
答案 1 :(得分:4)
几天后,我决定throw new com.sun.jersey.api.NotFoundException()
并按我的自定义WebApplicationExceptionMapper
进行处理。