过滤器中修改响应体后,前端解析异常
本文将解决问题:在过滤器中修改响应体后,前端无法正常解析返回的json对象,这是因为过滤器的目的是将带id的long字段转换成String再返回给前端。
代码如下:
@Component @Slf4j public class LongTypeFilter extends OncePerRequestFilter { private final ObjectMapper objectMapper = new ObjectMapper(); @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // ... // 转换数据 // ... String modifiedResponse = rootNode.toString(); responseWrapper.getWriter().write(modifiedResponse); responseWrapper.copyBodyToResponse(); // ... } private void checkAndConvertLongToString(jsonNode node) { // ... ((ObjectNode) node).putPOJO(fieldName, String.valueOf(field.asLong())); // ... } }
失败原因:前端拿到的返回数据中data字段是一个字符串,不是json对象。
立即学习“前端免费学习笔记(深入)”;
解决方案:使用jackson2objectmapperbuildercustomizer给jackson注册long序列化为string的序列化器,不需要从response读出来再写回去。