代码示例#1:
@POST
@Path("/foo")
@Consumes({ MediaType.APPLICATION_JSON })
public SomeClassA foo(SomeOtherClassB input, @Context HttpServletResponse response, @Context HttpServletRequest request) {
takeSomethingFromRequestAndPutOnResponseHeader(response, request);
//... do more logic actions
return x;
}
@POST
@Path("/bar")
@Consumes({ MediaType.APPLICATION_JSON })
public SomeClassC bar(SomeOtherClassD input, @Context HttpServletResponse response, @Context HttpServletRequest request) {
takeSomethingFromRequestAndPutOnResponseHeader(response, request);
//... do more logic actions
return y;
}
如您所见,我们有许多不同的 API 方法,在每个 API 中,我们需要注入(inject)请求和响应,以便我们能够对它们执行相同操作。
那么,问题是:如何才能让这段代码只写一次?
* 因此,我们不需要在每个方法上编写
行
@Context HttpServletResponse 响应,@Context HttpServletRequest 请求
* 因此,我们不需要每次都执行该方法
takeSomethingFromRequestAndPutOnResponseHeader(response, request);
这主要是为了防止有人忘记这样做......
原因是我们的 API 在多个服务器上运行,并且我们希望将服务器 url(来自请求)添加到响应头中,以便更轻松地调试不同环境。
非常感谢,
乌里。
我们想要的是:
@POST
@Path("/foo")
@Consumes({ MediaType.APPLICATION_JSON })
public SomeClassA foo(SomeOtherClassB input) {
//... do more logic actions
return x;
}
@POST
@Path("/bar")
@Consumes({ MediaType.APPLICATION_JSON })
public SomeClassC bar(SomeOtherClassD input) {
//... do more logic actions
return y;
}
虽然这是在其他地方曾经写过的。
@Context HttpServletResponse response, @Context HttpServletRequest request
takeSomethingFromRequestAndPutOnResponseHeader(response, request);
最佳答案
您可以通过公开和注释 HttpServletResponse/HttpServletRequest 字段,在类级别注入(inject) HttpServletResponse 和 HttpServletRequest。例如:
class MyResource {
@Context
private HttpServletResponse response;
@Context
private HttpServletRequest request;
.....
//API methods below.....
}
这样您就不需要将请求和响应作为参数显式传递给 API 方法。
关于java - JSON - 如何对请求响应进行常见操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013503/