代理请求的 JAX RS 资源?

问题描述 投票:0回答:1

如何构建代理请求和响应的 JAX RS 资源? -- 也就是说,我可以转发请求和响应正文,可能会更改标头等次要细节

已尝试在资源定义中向客户端转发请求/从客户端转发请求,但这不允许我混合服务器发送的事件和常规响应,并且很难知道使用 JAX RS 重新编码时响应是否发生变化。

java jakarta-ee proxy jax-rs server-sent-events
1个回答
0
投票

JAX-RS 允许使用过滤器来记录、更改和验证传入请求和传出响应,如其规范第 6 章所述。 如果需要更改传入请求,则必须有一个实现

@Provider

接口的

ContainerRequestFilter
,然后将此过滤器绑定到给定的休息端点。
假设您必须更改传入请求标头。你应该实现这样的事情:

@jakarta.ws.rs.ext.Provider public class IncomingFilter implements jakarta.ws.rs.container.ContainerRequestFilter { public void filter(ContainerRequestContext ctx) throws IOException { fixHeaders(ctx); } private void fixHeaders(ContainerRequestContext ctx) { // Do your thing } }

如果您必须将过滤器应用于每个请求,则应该这样做。如果您只需申请某些剩余端点,则必须像 CDI 一样使用名称绑定来理想地绑定它。创建名称绑定注释,例如:

@NameBinding @Target({ElementType.TYPE, ElementType.Method}) @Retention(value = RetentionPolicy.RUNTIME) public @interface HeaderAdjusted {}

使用名称绑定注释提供者和端点,然后就可以开始了:

@Provider @HeaderAdjusted public class IncomingFilter (...) @Path("/") public class MyEndpointClass { @HeaderAdjusted @GET @Produces("text/plain") @Path("hi") public String hi() { return myFixedHeaderInformationFromContext(); } }

请阅读规范中的整个第 6 章以获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.