在RESTEasy JAX-RS中注入自定义响应头

Ral*_*lph 7 web-services response jax-rs resteasy http-headers

我有RESTEasy(JAX-RS)服务器,有大约60个服务(到目前为止).我想通过服务器构建时间自动为提供者调用者注入一个自定义响应头:X-BuildTime: 20100335.1130.

有没有一种简单的方法可以在不修改我的每项服务的情况下完成

我试图使用实现一类org.jboss.resteasy.spi.interception.PostProcessInterceptor带注解@Provider@ServerInterceptor,但我无法弄清楚如何修改传递到我的ServerResponse postProcess()方法.

acd*_*ior 11

虽然MessageBodyWriterInterceptor有诀窍,但最好使用PostProcessInterceptor,因为它会拦截不调用MessageBodyWriters的响应(例如Response.created(URI.create("/rest/justcreated")).build()).

有关详细信息,请参阅官方文档.

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;

import org.jboss.resteasy.annotations.interception.ServerInterceptor;
import org.jboss.resteasy.core.ServerResponse;
import org.jboss.resteasy.spi.interception.PostProcessInterceptor;

@Provider
@ServerInterceptor
public class MyPostProcessInterceptor implements PostProcessInterceptor {

    @Override
    public void postProcess(ServerResponse response) {
        MultivaluedMap<String, Object> headers = response.getMetadata();
        List<Object> domains = headers.get("X-BuildTime");
        if (domains == null) { domains = new ArrayList<Object>(); }
        domains.add("20100335.1130");
        headers.put("X-BuildTime", domains);
    }

}
Run Code Online (Sandbox Code Playgroud)


Tar*_*log 6

我认为使用javax.servlet.Filter将是一个更容易的解决方案:

public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException {
   HttpServletResponse httpResponse = (HttpServletResponse)response;
   httpResponse.setHeadder(header, headerValue);
   chain.doFilter(request, response);
}
Run Code Online (Sandbox Code Playgroud)

在web.xml中为相关的URL配置它,你就完成了.