java - JSON - 如何对请求响应进行常见操作

标签 java json web-services rest jackson

代码示例#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/

相关文章:

java - 使用 cxf 客户端发送 BASIC 身份验证凭据

java - SpringMvc java.lang.NullPointerException - 配置是否正确

java - Angular 获取方法总是会出现错误部分

java - 如何用Java从数据库发送电子邮件?

java - Android 相对布局并隐藏其他 View 定义在其上方的 subview

json - ColdFusion serializeJSON 日期格式(错误?)

java - 基于 HTTP 请求为 Android 开发 RSS 阅读器的更好方法是什么?

c# - 从大型 JSON 中删除属性,c#

javascript - 循环json返回未定义

java - 在选择可用方法时如何在intelliJ中弹出方法定义窗口?