2015-10-08 4 views
0

Я новичок в dropwizard. Я использую версию 0.8.5 dropwizard. У меня есть dropwizard службы REST, который возвращает JSON, когда вызов успешен и HTTL, когда вызов не удается, как с HTTP коды статуса 500 или 404.Я хочу, чтобы dropwizard возвращал ответы HTTP 500 как JSON

счастливого пути

LOGGER.info("Cached userinfo for '{}'",username); 
JSONObject json = new JSONObject(); 
json.put("ticketId",created.getTicketId()); 
json.put("token", token); 
return Response.ok(json.toString()).build(); 

несчастными пути

if (created.getTicketId() == null) { 
LOGGER.error("Email not sent, ticket not created"); 
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).type(MediaType.APPLICATION_JSON).build(); 
} 

Вот завиток:

curl -H "Content-Type: application/json" -X POST -d '{"username":"WPf3s0G1M"}' http://localhost:7777/ids-rest-api/password/reset 

А вот ответ от что локон, я хочу этот ответ в формате JSON:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<title>Error 500 Request failed.</title> 
</head> 
<body><h2>HTTP ERROR 500</h2> 
<p>Problem accessing /ids-rest-api/password/reset. Reason: 
<pre> Request failed.</pre></p><hr><i><small>Powered by Jetty://</small> </i><hr/> 

</body> 
</html> 
+0

Можете ли вы подтвердить версию, которую используете, пожалуйста. Сайт [dropwizard] (http://www.dropwizard.io/about/release-notes.html), по-видимому, указывает, что пока они до 0.8.2. – Edd

ответ

3

Ваш метод будет работать, если вы добавляете объект в ответ, даже если его пустой объект JSON, как этот

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

@Path("/error") 
@Produces(MediaType.APPLICATION_JSON) 
public class BrokenResource { 

    @GET 
    public Response getServerError() { 
     return Response.serverError().entity("{}").build(); 
    } 
} 

Явный констатирует тип может быть удален, если метод или класс аннотируется с помощью @Produces (MediaType.APPLICATION_JSON), чтобы сэкономить некоторое время.