7

これまでのところ、約 60 のサービスを備えた RESTEasy (JAX-RS) サーバーがあります。サーバーのビルド時間: を使用して、プロバイダーの呼び出し元にカスタム応答ヘッダーを自動的に挿入したいと思いますX-BuildTime: 20100335.1130

各サービスを変更せずにこれを行う簡単な方法はありますか?

org.jboss.resteasy.spi.interception.PostProcessInterceptorアノテーション@Providerとを実装するクラスを使用しようとしています@ServerInterceptorが、メソッドに渡される ServerResponse を変更する方法がわかりませんpostProcess()

4

4 に答える 4

11

MessageBodyWriterInterceptorトリックは行いますが、 MessageBodyWriters を呼び出さない応答 ( など) をインターセプトするため、 を使用することPostProcessInterceptorをお勧めし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);
    }

}
于 2013-03-13T03:56:24.687 に答える
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);
}

関連する URL の web.xml で構成すれば完了です。

于 2011-03-25T16:51:37.153 に答える
2

MessageBodyInterceptorsでヘッダーを変更することもできます

(セクション 30.1 の最後にある例を確認してください)

@Provider
@ServerInterceptor
public class MyHeaderDecorator implements MessageBodyWriterInterceptor {

    public void write(MessageBodyWriterContext context) throws IOException, WebApplicationException
    {
       context.getHeaders().add("My-Header", "custom");
       context.proceed();
    }
}
于 2012-07-06T14:10:56.907 に答える