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