我是dropwizard的新手。我使用0.8.5版本的dropwizard。我有一个dropwizard REST服务,当调用成功时返回JSON,当调用不成功时返回HTTL,例如HTTP状态代码为500或404.
快乐的道路
class Base1
{
};
class Der3 : public Base1
{
};
class Base2 : public Base1
{
public:
f1();
};
class Der1 : Base2
{
};
class Der2 : Base2
{
};
不愉快的道路
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();
}
以下是该卷曲的回复,我想在JSON中回复:
curl -H "Content-Type: application/json" -X POST -d '{"username":"WPf3s0G1M"}' http://localhost:7777/ids-rest-api/password/reset
答案 0 :(得分: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)注释方法或类以节省一些时间,则可以显式声明类型。
答案 1 :(得分:2)
我认为投掷WebApplicationException
可以正常工作。
应:
import javax.ws.rs.WebApplicationException;
...
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
而不是:
Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.type(MediaType.APPLICATION_JSON).build();
您需要使用@Produces(MediaType.APPLICATION_JSON)
注释您的方法或资源类。
然后响应将是JSON格式,如:
{
"code": 500,
"message": "HTTP 500 Internal Server Error"
}