SpringBoot系列之完整项目创建(2)

准备工作:
昨天已经搭建好的基础

目的:前后端分离工程的数据校验和全局异常处理

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数据校验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SinceThenLater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值