具体产生原因请参考以下文章了解: 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);
}
}
}