我有一个POST REST api的过滤器,我想在过滤器中提取我的有效载荷的下面部分。
{
"foo": "bar",
"hello": "world"
}
过滤代码: -
public class PostContextFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext)
throws IOException {
String transactionId = requestContext.getHeaderString("id");
// Here how to get the key value corresponding to the foo.
String fooKeyVal = requestContext. ??
}
}
我没有看到任何使用ContainerRequestContext
对象将有效负载转移到api的简单方法。
所以我的问题是如何获得与我的有效载荷中的foo键对应的键值。
答案 0 :(得分:4)
尽管过滤器主要用于处理HTTP头,URI和/或HTTP方法等请求和响应参数,但拦截器旨在通过操纵实体输入/输出流来操纵实体。
ReaderInterceptor
允许您操作入站实体流,即来自“”流的流。使用Jackson来解析入站实体流,你的拦截器可能就像:
@Provider
public class CustomReaderInterceptor implements ReaderInterceptor {
// Create a Jackson ObjectMapper instance (it can be injected instead)
private ObjectMapper mapper = new ObjectMapper();
@Override
public Object aroundReadFrom(ReaderInterceptorContext context)
throws IOException, WebApplicationException {
// Parse the request entity into the Jackson tree model
JsonNode tree = mapper.readTree(context.getInputStream());
// Extract the values you need from the tree
// Proceed to the next interceptor in the chain
return context.proceed();
}
}