在 RESTEasy JAX-RS 中注入自定义响应标头
我有 RESTEasy (JAX-RS) 服务器,大约有 60 个服务(到目前为止)。我想使用服务器构建时间自动向提供程序调用者注入自定义响应标头:X-BuildTime: 20100335.1130
。
有没有一种简单的方法可以在不修改我的每项服务的情况下做到这一点?
我正在尝试使用一个类来实现带有注释@Provider
和@ServerInterceptor
的org.jboss.resteasy.spi.interception.PostProcessInterceptor
,但是我不知道如何修改传递到我的 postProcess()
方法中的 ServerResponse。
I have RESTEasy (JAX-RS) server with about 60 services (so far). I would like to automatically inject a custom response header to provider callers with the server build time: X-BuildTime: 20100335.1130
.
Is there an easy way to do this without modifying each of my services?
I am trying to use a class that implements org.jboss.resteasy.spi.interception.PostProcessInterceptor
with annotations @Provider
and @ServerInterceptor
, but I can't figure out how to modify the ServerResponse that is passed into my postProcess()
method.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
虽然
MessageBodyWriterInterceptor
可以解决这个问题,但最好使用PostProcessInterceptor
,因为它会拦截不调用 MessageBodyWriters 的响应(例如Response.created(URI.create) (“/rest/justcreated”)).build()
)。有关详细信息,请参阅官方文档 。
Although
MessageBodyWriterInterceptor
does the trick, it is better to usePostProcessInterceptor
, as it will intercept responses that do not call MessageBodyWriters (such asResponse.created(URI.create("/rest/justcreated")).build()
).For more info, see the official documentation.
我认为使用 javax.servlet.Filter 将是一个更简单的解决方案:
在 web.xml 中为相关 url 配置它,然后就完成了。
I think using
javax.servlet.Filter
will be a much easier solution:configure it in web.xml for the relevant urls, and you are done.
使用 javax.ws.rs.core.Response 怎么样;这样您就可以在创建响应数据的同一位置设置标头。
How about using javax.ws.rs.core.Response ; this way you can set the header in the same place where you create the response-data.
您还可以通过 MessageBodyInterceptors
(查看第 30.1 节末尾的示例)
You can also change header by MessageBodyInterceptors
( check the example at the end of section 30.1 )