Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSON-如何根据请求执行常见操作&;响应_Java_Json_Web Services_Rest_Jackson - Fatal编程技术网

Java JSON-如何根据请求执行常见操作&;响应

Java JSON-如何根据请求执行常见操作&;响应,java,json,web-services,rest,jackson,Java,Json,Web Services,Rest,Jackson,代码#1的示例: 正如您所见,我们有许多不同的API方法,在每个API中,我们都需要注入请求和响应,以便我们能够对它们执行相同的操作。 因此,问题是:我们如何才能使此代码只编写一次? *因此,我们不需要在每个方法上写 @Context-HttpServletResponse,@Context-HttpServletRequest-request *因此,我们不需要每次执行该方法 从request和putonresponseheader(响应,请求)获取一些信息 这主要是为了防止有人忘记这样做…

代码#1的示例:

正如您所见,我们有许多不同的API方法,在每个API中,我们都需要注入请求和响应,以便我们能够对它们执行相同的操作。

因此,问题是:我们如何才能使此代码只编写一次?
*因此,我们不需要在每个方法上写
@Context-HttpServletResponse,@Context-HttpServletRequest-request

*因此,我们不需要每次执行该方法
从request和putonresponseheader(响应,请求)获取一些信息

这主要是为了防止有人忘记这样做…

原因是我们在多个服务器上运行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);

如果您希望对所有API方法都使用此方法,为什么不使用


这不会注入请求和响应,但在调用了RequestAndPutonResponseHeader(响应,请求)中的某些内容后,您可能不需要它们。

您可以通过公开和注释HttpServletResponse/HttpServletRequest字段,在类级别注入HttpServletResponse和HttpServletRequest。例如:

class MyResource {
@Context 
private HttpServletResponse response;
@Context
private HttpServletRequest request;
.....
//API methods below.....

}

这样,您就不需要显式地将请求和响应作为参数传递给API方法。

问题出在哪里??我不完全理解您的需求步骤:)为所有资源创建基类,并向所有人注入响应和请求。
还有一个问题没有解决-如何应用
从requestandputonresponseheader(响应,请求)获取一些东西
对所有API调用(目前使用aspectj完成),但不喜欢它…为了解决第二个问题,您应该看看Friso的建议,并尝试使用过滤器。您将实现一个过滤器,
从requestandputonresponseheader
获取某些内容。筛选器的doFilter方法获得一个请求和响应。。。然后,您可以将过滤器映射到web.xml中的资源,当请求命中您的API方法之一时,容器将调用过滤器。这也是个好主意,问题是过滤器在
ServletRequest
上工作,而第一个选项注入
HttpServletRequest
。不同之处在于
HttpServletRequest
具有
getRequestURL()
方法,而
ServletRequest
没有,而我们需要它。您可以轻松地将ServletRequest转换为HttpServletRequest,在实践中总是这样。我想我可以。。。但是有些东西在铸造中失败了
HttpServletRequest扩展了ServletRequest
,我得到的实例是
ServletRequest
。。。所以不确定这是否好…奇怪,我从来没见过。您使用的servlet容器是什么(很可能是像Tomcat、jetty、JBoss、GlassFish、WebSphere之类的应用服务器…?)?
class MyResource {
@Context 
private HttpServletResponse response;
@Context
private HttpServletRequest request;
.....
//API methods below.....

}