2014-01-28 2 views
5

404 응답 코드를 사용하면 Dropwizard는 (Accept 헤더가 application/json 인 경우에도) 사용자 정의 html 코드를 반환합니다.404/503 오류에 대한 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
이미 사용자 정의 예외 매퍼를 구현했습니다. 그러나이 작업에 예외를 사용하고 싶지는 않습니다.

답변

4

며칠 후 나는 throw new com.sun.jersey.api.NotFoundException()으로 결정하고 내 주문 WebApplicationExceptionMapper으로 처리합니다.

5

응답 작성자의 유형 및 엔티티 메소드를 사용해야합니다. 같은

무언가 : 오류가 JSON으로 직렬화

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

.

+1

내 수업에는'@Produces (MediaType.APPLICATION_JSON)'주석이 있습니다. 왜 이것이 작동하지 않습니까? –

+0

본문 내용을 추가 할 엔티티 파트를 추가하려고 시도합니다. – LiorH

+0

네,이 문제를 해결하기 위해'.entity (error)'를 추가했습니다. 그러나이 문제를 다른 방법으로 해결했습니다. –