如何在球衣中为空值返回HTTP 404而不是HTTP 204响应代码 [英] How to return HTTP 404 instead of HTTP 204 response code for null values in jersey
问题描述
我有一个Jersey REST API,当要返回的实体为null
时,它返回204 No content而不是404.
I have a Jersey REST API that returns 204 No content instead of 404 when the entity to be returned back is null
.
为解决此问题,我目前正计划在resource方法中引发一个异常,以便它可以迫使Jersey像下面那样返回404.
To address this issue, I'm currently planning to throw an exception within the resource method so that it could force Jersey to return 404 like below.
if (feature == null) throw new WebApplicationException(404);
但是我有各种各样的REST URI遇到同样的问题.有没有一种方法可以解决所有这些问题,而又不涉及每种资源方法?
But I have various REST URIs that suffer from the same problem. Is there a way to address all of them without touching each and every resource method?
我的资源方法如下:
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();
}
}
推荐答案
您可以实现ContainerResponseFilter并根据需要自定义响应.
you can implement ContainerResponseFilter and customise the response based on your requirement.
例如:
@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));
}
}
}
自定义上面的代码并实现您的业务逻辑.
Customize the above code and implement your business logic.
这篇关于如何在球衣中为空值返回HTTP 404而不是HTTP 204响应代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!