Json对404/503错误的回应

时间:2014-01-28 11:48:38

标签: java rest dropwizard

当我使用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>

如何为404503响应代码(等)自定义返回正文以返回JSON?

PS
我已经实现了自定义异常映射器。但我不想为此任务使用例外

2 个答案:

答案 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进行处理。