SpringBoot restful返回值+统一异常处理+参数校验
restful返回值
自定义错误类型
新建枚举类,写入错误码及错误提示
/**
* 接口返回错误码,错误提示
* 参考 https://blog.youkuaiyun.com/alisonyu/article/details/82833413
*/
public enum ResultConsts {
SYSERR(-1,"系统错误"),
OK(0,"请求成功"),
ILLGAL_PARAM(40001,"参数无效"),
;
private Integer code;
private String msg;
ResultConsts(Integer code, String msg){
this.code = code;
this.msg = msg;
}
public Integer getCode(){
return code;
}
public void setCode(Integer code){
this.code = code;
}
public String getMsg(){
return msg;
}
public void setMsg(String msg){
this.msg = msg;
}
}
Restful接口返回值拦截
/**
* 捕获所有Rest接口返回值
* springboot-Rest接口返回统一格式数据
* 参考 https://blog.youkuaiyun.com/alisonyu/article/details/82833413
*/
@ControllerAdvice(annotations = RestController.class)
public class ResultHandler implements ResponseBodyAdvice{
private ThreadLocal<ObjectMapper> mapperThreadLocal = ThreadLocal.withInitial(ObjectMapper::new);
private static final Class[] annos={
RequestMapping.class,
GetMapping.class,
PostMapping.class,
DeleteMapping.class,
PutMapping.class
};
/**
* 对所有RestController的接口方法进行拦截
* @param returnType
* @param converterType
* @return
*/
@Override
public boolean supports(MethodParameter returnType, Class converterType){
AnnotatedElement element = returnType.getAnnotatedElement();
return Arrays.stream(annos).anyMatch(anno -> anno.isAnnotation() && element.isAnnotationPresent(anno));
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
Object out;
ObjectMapper mapper = mapperThreadLocal.get();
response.getHeaders().setContentType(MediaType.APPLICATION_JSON);