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 {
}