我有以下代碼:如何在Tomcat上返回JAX-RS(Jersey)中的HTTP 404 JSON/XML響應?
@Path("https://stackoverflow.com/users/{id}")
public class UserResource {
@Autowired
private UserDao userDao;
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public User getUser(@PathParam("id") int id) {
User user = userDao.getUserById(id);
if (user == null) {
throw new NotFoundException();
}
return user;
}
如果我請求不存在,像/users/1234
用戶,以「Accept: application/json
」,該代碼返回HTTP 404
響應像預期,但返回Content-Type
套到text/html
和html的正文消息。註釋@Produces
被忽略。
這是代碼問題還是配置問題?
我測試過了。我繼續拋出NotFoundException,但現在使用ExceptionMapper將該異常映射爲設置狀態碼和媒體類型。有用! 在此之前,我試圖返回一個等效的響應,而不是拋出NotFoundException,但我有相同的結果,一個文本/ HTML 404響應。 這是因爲如果我的應用程序拋出NotFoundException默認(隱式)ExceptionMapper進來並覆蓋響應,我返回到HTML響應? 謝謝! – IJR
嘗試不同的解決方案後,這是最好和正確的解決方案。映射* NotFoundException *不是強制性的。只需使用Exception並執行您所需的操作 – Valijon
@Provider非常重要 –