准备工作:
昨天已经搭建好的基础
目的:前后端分离工程的数据校验和全局异常处理
1.数据校验:
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.测试例子创建
@Data
@ApiModel(value = "用户表单")
public class UserForm implements Serializable {
@NotBlank(message = "姓名不能为空")
@ApiModelProperty(value = "用户姓名")
private String name;
}
3.使用
@Validated可更换为@Valid,Spring做了兼容;但是@Valid不支持分组校验
@PostMapping("/save")
public String save(@Validated @RequestBody UserForm form){
stringRedisTemplate.opsForValue().set("key","redisson");
return "save ok";
}
4.结果
数据返回结果:
后端结果:
前端看到的结果并不是我们想给他的,所以接下来做一个公共的响应结果集和设计对应的异常处理
2.异常处理
1.定义响应结果的编码枚举
/**
* @Author: ChenTaoTao
* @Date: 2021/11/3 10:22
* @Describe:
*/
@Getter
public enum ResponseEnum {
OK(200,true,"ok"),
PARAM_ERR(400,false,"请求参数有误"),
ERR(500,false,"服务器错误");
private Integer code;
private Boolean status;
private String msg;
ResponseEnum(Integer code, Boolean status,String msg){
this.code = code;
this.status = status;
this.msg = msg;
}
}
2.定义公共返回结果
/**
* @Author: ChenTaoTao
* @Date: 2021/11/3 10:19
* @Describe:
*/
@Data
public class R<T> {
private int code;
private T data;
private String msg;
private Boolean status;
public static R ok(){
return ok(null);
}
public static<T> R<T> ok(T data){
return new R(ResponseEnum.OK,data);
}
private R(ResponseEnum response,T data){
this.code = response.getCode();
this.msg = response.getMsg();
this.status = response.getStatus();
this.data = data;
}
public static R err(){
return new R(ResponseEnum.ERR,null);
}
public static R err(ResponseEnum response){
return new R(response,null);
}
}
4.自定义异常
一般我们在业务中都会自定义一些异常,此异常需继承于RuntimeException类
@Data
public class ServiceException extends RuntimeException{
private int code;
private String msg;
}
5.全局异常处理配置
/**
* @Author: ChenTaoTao
* @Date: 2021/11/3 10:15
* @Describe:
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ServiceException.class)
public R serviceException(ServiceException e){
return R.err();
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public R argsException(MethodArgumentNotValidException e){
return R.err(ResponseEnum.PARAM_ERR);
}
}
6.测试
返回的状态码不再是400,而是200
返回的数据结果
以上就是数据校验和全局异常处理的部分内容。
更多数据校验内容请参见:SpringBoot数据校验