Java 如何为jersey中的空值返回HTTP 404而不是HTTP 204响应代码
我有一个Jersey REST API,当要返回的实体为Java 如何为jersey中的空值返回HTTP 404而不是HTTP 204响应代码,java,rest,jax-rs,jersey-2.0,Java,Rest,Jax Rs,Jersey 2.0,我有一个Jersey REST API,当要返回的实体为null时,它返回204无内容,而不是404 为了解决这个问题,我目前计划在resource方法中抛出一个异常,这样它就可以强制Jersey返回404,如下所示 if (feature == null) throw new WebApplicationException(404); 但是我有很多REST URI都有同样的问题。有没有一种方法可以在不涉及每个资源方法的情况下解决所有这些问题 我的资源方法如下所示: import java.u
null
时,它返回204无内容,而不是404
为了解决这个问题,我目前计划在resource方法中抛出一个异常,这样它就可以强制Jersey返回404,如下所示
if (feature == null) throw new WebApplicationException(404);
但是我有很多REST URI都有同样的问题。有没有一种方法可以在不涉及每个资源方法的情况下解决所有这些问题
我的资源方法如下所示:
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.example.webapi.domain.Feature;
import com.example.webapi.service.FeatureService;
@Component
@Path("features")
@Produces(MediaType.APPLICATION_JSON)
public class FeatureResource {
@Autowired
private FeatureService featureService;
@GET
public List<Feature> getFeatures() {
return featureService.listAllFeatures();
}
@GET
@Path("{featureCode}")
public Feature getFeature(@PathParam("featureCode") Integer featuresCode) {
return featureService.findFeatureByFeatureCode(featuresCode);
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response addFeature(Feature feature, @Context UriInfo uriInfo) {
Integer id = (Integer) featureService.createFeature(feature);
return Response.created(uriInfo.getAbsolutePathBuilder().path(id.toString()).build()).entity(feature).build();
}
}
import java.util.List;
导入javax.ws.rs.Consumes;
导入javax.ws.rs.GET;
导入javax.ws.rs.POST;
导入javax.ws.rs.Path;
导入javax.ws.rs.PathParam;
导入javax.ws.rs.products;
导入javax.ws.rs.core.Context;
导入javax.ws.rs.core.MediaType;
导入javax.ws.rs.core.Response;
导入javax.ws.rs.core.UriInfo;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Component;
导入com.example.webapi.domain.Feature;
导入com.example.webapi.service.FeatureService;
@组成部分
@路径(“特征”)
@产生(MediaType.APPLICATION_JSON)
公共类特征资源{
@自动连线
私人特色服务特色服务;
@得到
公共列表getFeatures(){
返回featureService.listAllFeatures();
}
@得到
@路径(“{featureCode}”)
公共功能getFeature(@PathParam(“featureCode”)整数功能代码){
返回featureService.findFeatureByFeatureCode(featuresCode);
}
@职位
@使用(MediaType.APPLICATION_JSON)
公共响应addFeature(功能特性,@Context UriInfo UriInfo){
整数id=(整数)featureService.createFeature(特性);
返回Response.created(uriInfo.getAbsolutePathBuilder().path(id.toString()).build()).entity(feature.build();
}
}
您可以使用请求或响应筛选器,具体取决于您要检查的空值
检查文档您可以实施ContainerResponseFilter,并根据您的需求定制响应 例如:
@Provider
public class LoggingResponseFilter
implements ContainerResponseFilter {
private static final Logger logger = LoggerFactory.getLogger(LoggingResponseFilter.class);
public void filter(ContainerRequestContext requestContext,
ContainerResponseContext responseContext) throws IOException {
String method = requestContext.getMethod();
logger.debug("Requesting " + method + " for path " + requestContext.getUriInfo().getPath());
Object entity = responseContext.getEntity();
if (entity != null) {
logger.debug("Response " + new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(entity));
}
}
}
自定义上述代码并实现您的业务逻辑。您可以通过响应对象发送自己的响应代码。