2014-01-28 140 views
5

當我使用404響應代碼Dropwizard返回自定義html代碼(即使Accept標頭等於application/json)。Json響應404/503錯誤

控制器的方法:

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
我已經實現了自定義異常映射器。但我不想爲此任務使用例外

回答

4

幾天後,我決定throw new com.sun.jersey.api.NotFoundException()並由我的自定義WebApplicationExceptionMapper處理它。

5

您應該使用響應構建器的類型和實體方法。

類似:

return Response 
       .status(Response.Status.NOT_FOUND) 
       .type(MediaType.APPLICATION_JSON_TYPE) 
       .entity(error).build(); 

這裏的錯誤是序列化到JSON。

+1

我的類有'@Produces(MediaType.APPLICATION_JSON)'註釋。爲什麼這不起作用? –

+0

嘗試添加將添加主體內容的實體部分 – LiorH

+0

是的,添加'。實體(錯誤)'解決了這個問題......但我解決了這個問題的其他方法 –