java - 422 状态码 - ReaderInterceptor Jersey
问题描述
在我现有的 API 调用之一中引入ReaderInterceptor后,我收到 422 错误。电话之前工作正常,但在我介绍了 ReaderInterceptor 后开始给出 422。
这是我的 ReaderInterceptoraroundReadForm()
方法的代码
@Override
public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {
InputStream is = context.getInputStream();
String body = new BufferedReader(new InputStreamReader(is)).lines().collect(Collectors.joining("\n"));
ObjectMapper mapper = new ObjectMapper();
try {
SampleObject sampleObject = mapper.readValue(body, SampleObject.class);
LOGGER.info(sampleObject.getSampleProperty());
} catch (JsonGenerationException | JsonMappingException e) {
LOGGER.info(e.getMessage());
}
return context.proceed();
}
我想做的是读取请求中的正文,使用杰克逊将其转换为 POJO ObjectMapper
,然后按原样向前移动请求。不确定,这个 422 状态码的原因是什么。
解决方案
ObjectMapper 将关闭请求输入流。尝试从 body 变量创建一个新流。并调用 context.setInputStream()。
public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {
InputStream is = context.getInputStream();
String body = new BufferedReader(new InputStreamReader(is)).lines().collect(Collectors.joining("\n"));
ObjectMapper mapper = new ObjectMapper();
try {
SampleObject sampleObject = mapper.readValue(body, SampleObject.class);
LOGGER.info(sampleObject.getSampleProperty());
} catch (JsonGenerationException | JsonMappingException e) {
LOGGER.info(e.getMessage());
}
InputStream in = new ByteArrayInputStream(body.getBytes(StandardCharsets.UTF_8));
context.setInputStream(in)
return context.proceed();
}
您尝试做的事情的缺点是性能。似乎您会将 JSON 字符串解析为对象两次。一次在拦截器中,一次在阅读器中。
如果身体很小,这不是什么大问题。
推荐阅读
- amazon-web-services - 如何使用aws cli按s3的最后修改日期升序排序
- visual-studio - 什么是__CxxFrameHandler4,链接器错误“未解析的外部符号__CxxFrameHandler4”到底是什么意思?
- wso2 - 尝试添加新租户时出现 403 错误
- ffmpeg - WebRTC 多流录制
- kubernetes - Istio 排除政策
- c - 在 C 中得到错误的不匹配导致两个字符串
- javascript - 如何在 Angular 应用中使用 AngularFire 从 Firebase 实时数据库中查询和显示经过身份验证的用户的订单?
- python - 当要设置的值是多个嵌套列表时设置单元格值的正确方法
- javascript - 特殊字符 ₀ 搞乱了 Chrome 扩展弹出窗口中的元素布局
- python - Django 使用 IIS / 虚拟目录提供各种文件类型