SpringBoot 学习中遇到的注解

lombok 里的注解

@Data    生成getter,setter 等函数
@NoArgsConstructor     生成无参构造函数
@AllArgsConstructor       生成全参数构造函数

/**
 * @Data     生成getter,setter等函数
 * @NoArgsConstructor     生成无参构造函数
 * @AllArgsConstructor     生成全参数构造函数
 * @author fujingtao
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonResponse<T> implements Serializable {
        /.../
}
@RestControllerAdvice(value = "org.commerce")  统一处理响应        
/**
 * @BelongsProject: ylwj-commerce-springcloud
 * @BelongsPackage: org.commerce.advice
 * @Author: FuJingTao
 * @Date: 2022/6/6 23:45
 * @Description: 实现统一响应
 */
@RestControllerAdvice(value = "org.commerce")
public class CommonResponseDataAdvice implements ResponseBodyAdvice<Object>{

    /**
     * 判断是否需要对响应进行处理
     */
    @Override
    @SuppressWarnings("all")
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {

        if (methodParameter.getDeclaringClass()
                .isAnnotationPresent(IgnoreResponseAdvice.class)){
            return false;
        }
        if (methodParameter.getMethod().isAnnotationPresent(IgnoreResponseAdvice.class)){
            return false;
        }

        return true;
    }

    /**
     *   SuppressWarnings  屏蔽警告信息
     */
    @Override
    @SuppressWarnings("all")
    public Object beforeBodyWrite(Object o,
                                  MethodParameter methodParameter,
                                  MediaType mediaType,
                                  Class<? extends HttpMessageConverter<?>> 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;
    }
}
@ExceptionHandler(value = Exception.class) 拦截所有异常统一处理
@Slf4j
@RestControllerAdvice
public class GlobalExceptionAdvice {
    /**
     * @ExceptionHandler 注解能拦截异常 ()里填写的是捕获那些异常
     */
    @ExceptionHandler(value = Exception.class)
    public CommonResponse<String> handlerCommerceException(
            HttpServletRequest request, Exception e
    ) {
        CommonResponse<String> response = new CommonResponse<>(
                -1, "business error"
        );
        response.setData(e.getMessage());
        log.error("commerce service has error:[{}]", e.getMessage(), e);
        return response;
    }
}

@Target(...) 说明了Annotation所修饰的对象范围

ElementType.METHOD  方法

ElementType.TYPE 类 枚举 接口

@Retention作用是定义被它所注解的注解保留多久、

source:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;被编译器忽略

class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期

runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在

这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。

原文地址(详细解释了@Retention):@Retention注解作用_愿好的博客-CSDN博客_retention注解

/**
 * @BelongsProject: ylwj-commerce-springcloud
 * @BelongsPackage: org.commerce.annotation
 * @Author: FuJingTao
 * @Date: 2022/6/6 23:41
 * @Description:  忽略统一响应注解定义
 */
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreResponseAdvice {


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值