新的dropwizard!无论如何,我可以从apis手动返回不同的http状态代码吗?基本上与此类似!
@GET
@Timed
public MyObject getMyObject(@QueryParam("id") Optional<String> id) {
MyObj myObj = myDao.getMyObject(id)
if (myObj == null) {
//return status.NOT_FOUND; // or something similar
// or more probably
// getResponseObjectFromSomewhere.setStatus(mystatus)
}
return myObj;
}
答案 0 :(得分:10)
这就像投掷WebApplicationException
一样简单。
@GET
@Timed
public MyObject getMyObject(@QueryParam("id") Optional<String> id) {
MyObject myObj = myDao.getMyObject(id)
if (myObj == null) {
throw new WebApplicationException(404);
}
return myObj;
}
随着您的进一步发展,您可能希望将自定义异常放在一起,read more about here。
答案 1 :(得分:9)
我建议使用JAX-RS Response对象,而不是在响应中返回实际的域对象。它是将响应对象包含元数据的优秀标准,并为处理状态代码,标题,客户内容类型等提供了一个很好的构建器。
//import javax.ws.rs.core.Response above
@GET
@Timed
public Response getMyObject(@QueryParam("id") Optional<String> id) {
MyObject myObj = myDao.getMyObject(id)
if (myObj == null) {
//you can also provide messaging or other metadata if it is useful
return Response.status(Response.Status.NOT_FOUND).build()
}
return Response.ok(myObj).build();
}
答案 2 :(得分:4)
最简单的方法是返回Optional<MyObject>
。如果您使用dropwizard-java8软件包,Dropwizard会在您的结果为Optional.absent()
或Optional.empty()
时自动抛出404。
只是做:
@GET
@Timed
public Optional<MyObject> getMyObject(@QueryParam("id") Optional<String> id) {
Optional<MyObject> myObjOptional = myDao.getMyObject(id)
return myObjOptional;
}
显然,您需要根据Guava返回Optional.fromNullable(get(id))
或Java8包的Optional.ofNullable(get(id))
来更新DAO。
除非您想要返回Response
和200
以外的自定义状态代码,否则无需使用自定义404
个对象