哪个网站有ae免费模板,2012服务器如何做网站,制作网站模板的发展空间,电话网络营销是什么目录 1.统一数据格式返回
2.统一异常处理
3.接口返回String类型问题 1.统一数据格式返回
添加ControllerAdvice注解实现ResponseBodyAdvice接口重写supports方法#xff0c;beforeBodyWrite方法
/*** 统一数据格式返回的保底类 对于一些非对象的数据的再统一 即非对象的封…目录 1.统一数据格式返回
2.统一异常处理
3.接口返回String类型问题 1.统一数据格式返回
添加ControllerAdvice注解实现ResponseBodyAdvice接口重写supports方法beforeBodyWrite方法
/*** 统一数据格式返回的保底类 对于一些非对象的数据的再统一 即非对象的封装成对象再返回*/
ControllerAdvice //控制器通知类
public class ResponseAdvice implements ResponseBodyAdvice {Autowiredprivate ObjectMapper objectMapper;/*** 开关* true表示返回结果作统一处理* false不处理*/Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}// 该方法具体实现统一返回 SneakyThrowsOverridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if(body instanceof AjaxResult) {return body;}// 字符串比较特殊 是由于序列化问题导致// 对于字符串类型可以使用SpringBoot提供的Jackson实现信息的序列化if(body instanceof String) {return objectMapper.writeValueAsString(body);}return AjaxResult.success(,body);}
}
String类型需要特殊处理的原因类型转换异常。即序列化问题。 由于我设置了统一返回类codemsgdataString类型的数据在上面第一步返回的body中就已经被包装成一个对象了后续传参也都是泛型直到调用 addDefaultHeaders 方法接收却是String类型的。对象是不能自动转成String类型的。并且是String类型才会走上面的流程。
解决办法就是使用SpringBoot提供的Jackson库可以将对象转成Json格式的字符串。即序列化。 2.统一异常处理
加ControllerAdvice注解控制器通知类加ResponseAdvice注解类上或方法上表示返回的是非页面的数据加ExceptionHandler注解在每个方法上加
/*** 捕获项目运行中出现的异常并进行统一异常的返回* 捕获流程 先捕获匹配具体的异常没找到(即我们没定义)再往上到RunTimeException,没匹配到就再往上到Exception 即按照异常继承关系往上找* 能不能捕获到具体的异常要看我们自定义的方法中有没有写具体的异常*/
ResponseBody //务必加 才能返回数据类型 不加返回页面 可以加类上或方法上
ControllerAdvice
public class ErrorHandler {ExceptionHandlerpublic AjaxResult handler(Exception e) {return AjaxResult.fail(内部发生异常);}ExceptionHandlerpublic AjaxResult handler(RuntimeException e) {return AjaxResult.fail(内部发生异常);}ExceptionHandlerpublic AjaxResult handler(NullPointerException e) {return AjaxResult.fail(空指针异常);}ExceptionHandlerpublic AjaxResult handler(ArithmeticException e) {return AjaxResult.fail(算术异常);}}
3.接口返回String类型问题
接口返回String类型的数据时需要转Json格式 。所以尽量少用直接将String类型的数据包装在对象中返回即可。