测试代码
@RequestMapping("sayhi")
public String sayhi(){
return "sayhi";
}
}
统一的数据格式
@SneakyThrows
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
if (body instanceof HashMap){
return body;
}
// 重写返回结果,让其返回一个统一的数据格式
HashMap<String, Object> result = new HashMap<>();
result.put("code", 200);
result.put("data", body);
result.put("msg", "");
return result;
}
执行流程:
1.方法返回的是String 统一数据返回之前处理时将 Sring -> HashMap
2.而在我们将数据返回给前端时 将HashMap转换成applicat/json字符串
问题就是 我们在返回时 执行StringHttpMessageConverter方法 ,但此方法是应String类型时执行的方法,非Sting时执行HttpMessageConverter 进行类型转换。
解决方案:
方法一:
将 StringHttpMessageConverter 去掉
@Configuration
public class MyConfig implements WebMvcConfigurer {
/**
* 移除StringHttpMessageConverter
*
* @param converters
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.removeIf(converter -> converter instanceof StringHttpMessageConverter) ;
}
}
此时就能返回数据给前端。
方法二:
在数据统一处理时,判断是否时String,让其返回String 而非HashMap
if (body instanceof String){
return objectMapper.writeValueAsString(result);
}
至此这就是我所了解的此问题的处理方法,在此也谢谢大家,如果有不对的地方,欢迎大家指出。