【SpringBoot统一返回处理遇到的问题cannot be cast to java.lang.String】

发布于:2024-07-14 ⋅ 阅读:(164) ⋅ 点赞:(0)

具体产生原因请参考以下文章了解: https://www.jianshu.com/p/0f16c9f1760e

解决办法:

    if (body instanceof String){
            //string类型单独处理
            try {
                if (response instanceof ServletServerHttpResponse) {
                    response.getHeaders().put("content-type", Lists.newArrayList(new String[]{"application/json; charset=UTF-8"}));
                }
                return this.converter.getObjectMapper().writeValueAsString(ResultData.success(body));
            } catch (JsonProcessingException var8) {
                throw new RuntimeException(var8);
            }
        }else {
            return ResultData.success(body);
        }
    }

其中this.converter 在上方引入

@Autowired
    private MappingJackson2HttpMessageConverter converter;

全部代码

@ControllerAdvice(basePackages = "com.***.controller")
public class UnifiedReturnAdvice implements ResponseBodyAdvice<Object> {

    @Autowired
    private MappingJackson2HttpMessageConverter converter;

    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {

        return returnType.getDeclaringClass().getName().contains("com.***.controller");
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        Class<?> containingClass = returnType.getContainingClass();
        //判断进入的方法对应的接口上的注解
        boolean isContainUnifiedReturn = containingClass.isAnnotationPresent(UnifiedReturn.class);
//       判断的是进入的方法: returnType.hasMethodAnnotation(UnifiedReturn.class);
        if (!isContainUnifiedReturn) {
            return body;
        }
        if (body instanceof String){
            //string类型单独处理
            try {
                if (response instanceof ServletServerHttpResponse) {
                    response.getHeaders().put("content-type", Lists.newArrayList(new String[]{"application/json; charset=UTF-8"}));
                }
                return this.converter.getObjectMapper().writeValueAsString(ResultData.success(body));
            } catch (JsonProcessingException var8) {
                throw new RuntimeException(var8);
            }
        }else {
            return ResultData.success(body);
        }
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到