当前位置: 首页 > 知识库问答 >
问题:

拦截JAX-RS web服务请求以添加JSON字段

解晟
2023-03-14
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("LogIn")
public Response logIn(@Context HttpServletRequest request, Parameters requestParameters) {...}

谢谢!

共有1个答案

江向阳
2023-03-14

可以用拦截器来实现。

拦截器旨在通过操纵实体输入/输出流来操纵实体。有两种拦截器,ReaderInterceptorWriterInterceptor

读取器拦截器用于操作入站实体流。这些是从“铁丝”上传来的溪流。因此,使用读取器拦截器可以在服务器端操作请求实体流。Writer拦截器用于将实体写入“电线”的情况,当写出响应实体时,“电线”在服务器上意味着

@Provider
public class CustomReaderInterceptor implements ReaderInterceptor {

    @Override
    public Object aroundReadFrom(ReaderInterceptorContext context) 
                      throws IOException, WebApplicationException {

        InputStream stream = context.getInputStream();

        // Manipulate the HTTP entity using the InputStream

        context.setInputStream(stream);
        return context.proceed();
    }
}
// Create a Jackson ObjectMapper instance (it can be injected instead)
ObjectMapper mapper = new ObjectMapper();

// Parse the requested entity into a JSON tree
JsonNode tree = mapper.readTree(context.getInputStream());

// Add a property to the JSON
((ObjectNode) tree).put("field", "value");

// Set the input stream containing the manipulated JSON
context.setInputStream(new ByteArrayInputStream(mapper.writeValueAsBytes(tree)));

// Proceed to the next interceptor in the chain
context.proceed();

名称绑定是一个允许对JAX-RS运行时说特定的筛选器或拦截器将只针对特定的资源方法执行的概念。当过滤器或拦截器仅限于特定的资源方法时,我们说它是名称绑定的。

可以使用@namebinding批注将筛选器分配给资源方法。该批注用作应用于提供程序和资源方法的其他用户实现的批注的元批注。

名称绑定注释可以定义如下(注释的名称由您决定):

@NameBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface CustomizeResponse { }
@Provider
@CustomizeResponse
public class CustomReaderInterceptor implements ReaderInterceptor {
    ...
}
@GET
@CustomizeResponse
@Produces(MediaType.APPLICATION_JSON)
public Response myMethod() {
    ...
}
@Path("/foo")
@CustomizeResponse
public class MyResource() {
    ...
}
 类似资料:
  • 问题内容: 我有一个JAX-RS Web服务,它返回一个带JSON请求参数(映射到Parameter对象),如下所示(它在WebLogic 12.2.1中运行)。是否可以编写一个拦截器或过滤器,以便在调用Web服务时,它将在JSON请求消息中添加一个额外的字段,以便下面的方法将在requestParameters中获得该额外的字段? 谢谢! 问题答案: 拦截器 这可以通过 拦截器 来实现。 拦截器

  • 问题内容: 在Spring Boot应用程序中添加HttpRequest拦截器的正确方法是什么?我想做的是记录每个HTTP请求的请求和响应。 我发现了一些有关如何对较早版本的spring进行相同操作的Web示例,但这些示例与applicationcontext.xml一起使用。请帮忙。 问题答案: 由于你使用的是Spring Boot,因此我假设你希望在可能的情况下依靠Spring的自动配置。要添

  • 我找到了一些关于如何使用spring旧版本执行相同操作的web示例,但这些示例适用于ApplicationContext.xml。请帮帮忙。

  • 一、拦截请求 mitmproxy的强大功能是拦截请求。拦截的请求将暂停,以便用户可以在将请求发送到服务器之前修改(或丢弃)该请求。mitmproxy的set intercept命令配置拦截。i默认情况下,该命令绑定到快捷方式。 通常不希望拦截所有请求,因为它会不断中断您的浏览。因此,mitmproxy希望将流过滤器表达式作为set intercept选择性拦截请求的第一个参数。在下面的教程中,我们

  • 配置拦截器 declarations: [ AppComponent ], HttpClientModule ], providers: [ [ { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true } ] bootstrap:

  • 在 imi 中更加推荐使用 AOP 来拦截请求。 不要忘记把 Aspect 类加入 beanScan! Demo <?php namespace ImiApp\ApiServer\Aop; use Imi\RequestContext; use Imi\Aop\Annotation\Around; use Imi\Aop\Annotation\Aspect; use Imi\Aop\Annota