美文网首页微服务
@RestControllerAdvice构造统一返回值格式和统

@RestControllerAdvice构造统一返回值格式和统

作者: 墨倾心児 | 来源:发表于2019-11-17 15:40 被阅读0次

利用注解@RestControllerAdvice拦截所有的ajax请求,构造统一格式的返回值

/**
 * @desc 统一的响应结构
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonResponse<T> implements Serializable {
    private Integer code;
    private String message;
    private T data;

    public CommonResponse(Integer code, String message) {
        this.code  = code;
        this.message = message;
    }

}

配置拦截

/**
 * @desc 对响应的统一拦截,把所有响应弄成同一个格式
 **/
@RestControllerAdvice
public class CommonResponseDataAdvice implements ResponseBodyAdvice {
    @Override
    public boolean supports(MethodParameter methodParameter, Class aClass) {
        //通过方法参数得到类名, 然后得到类上的annotation,
        // 如果被IgnoreResponseAdvice标识就不拦截
        if (methodParameter.getDeclaringClass().isAnnotationPresent(
                IgnoreResponseAdvice.class
        )){
            return false;
        }
        //方法上被标注,也不拦截
        if (methodParameter.getMethod().isAnnotationPresent(
                IgnoreResponseAdvice.class
        )){
            return false;
        }
        return true;
    }

    //在写入响应之前,所以在这里构造统一格式
    @Override
    @Nullable
    public Object beforeBodyWrite(@Nullable Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        CommonResponse<Object> response = new CommonResponse<>(0, "");
        if (null == o) {
            return response;
        } else if (o instanceof CommonResponse) {
            response = (CommonResponse<Object>) o;
        } else {
            response.setData(o);
        }
        return response;
    }
}

有时候有些简单的注解,不需要统一的格式,就使用这个自定义的注解

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreResponseAdvice {
}

另外,同一个原理,可以进行统一异常处理

/**
 * @desc 统一的异常处理  可以自己多定义几个异常类,细化,然后多建立几个方法使用@ExceptionHandler注解,处理特定的异常
 **/
@RestControllerAdvice
public class GlobalExceptionAdvice {

    @ExceptionHandler(value = GlobeException.class)
    public CommonResponse<String> handlerGlobeException(HttpServletRequest request, GlobeException exception){
        CommonResponse<String> response=new CommonResponse<>(-1,"");
        response.setData(exception.getMessage());
        return  response;
    }
}
public class GlobeException extends Exception {
    public GlobeException(String message) {
        super(message);
    }
}

相关文章

  • @RestControllerAdvice构造统一返回值格式和统

    利用注解@RestControllerAdvice拦截所有的ajax请求,构造统一格式的返回值 配置拦截 有时候有...

  • SpringMVC 统一异常处理

    通过 @RestControllerAdvice + @ExceptionHandler 注解完成 统一异常处理,...

  • springboot全局异常处理类

    1.注解 主要是用了个 @RestControllerAdvice 注解。拦截controller层的异常统...

  • day12

    1.构造方法构造方法的格式:修饰符 构造方法名(参数列表){}构造方法的体现:构造方法没有返回值类型。也不需要写返...

  • 构造方法

    格式:修饰符 类名(参数签名){} 1.构造方法名称必须和类名相同,包括大小写,构造器没有返回值,但也不能写voi...

  • 构造方法

    什么是构造方法 构造方法与类名相同且没有返回值 构造方法的语法格式image.png 只能在对象实例化的时候调用 ...

  • 经典面试题(java基础(二)面向对象)

    1,构造方法 构造方法的特点 1)构造方法的方法名和类名相同 2)构造方法没有返回值,也没有返回值类型 3)如果程...

  • 初始化和清理

    构造函数 构造函数名称和class名称相同。构造函数是一种很独特的函数,因为它没有返回值。这和“返回值为void”...

  • 构造代码块

    一、构造代码块作用:给对象进行统一初始化 二、格式 { 构造代码块内容 } 三、注意问题 1.构造代码块...

  • 只需一步,在Spring Boot中统一Restful API返

    统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以...

网友评论

    本文标题:@RestControllerAdvice构造统一返回值格式和统

    本文链接:https://www.haomeiwen.com/subject/jgvpictx.html