SpringBoot集成validation验证

 

 

背景:SpringBoot版本 2.1.2.RELEASE 。在做一个API接口需要数据校验把错误信息返回给前端,发现网上找的很多方法都是过时的,这里整理了一下,希望对大家有帮助。废话不多说,下面是正文内容↓

首先导包 (我是gradle,maven改一下就可以)

compile group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.1.2.RELEASE'
然后在要验证字段的dto/entity内添加配置
import lombok.Data;
import javax.validation.constraints.Pattern;

/**
 * @Classname DictDto
 * @Description 字典 传输类
 * @Date 2020-04-29 9:53
 * @Created by deedywu
 */
public final class DictDto {

    @Data
    public static final class ParentInsert {

        @Pattern(regexp = "[a-zA-Z0-9_]{1,36}", message = "字段应该在1-36位之间且只能是字母数字组成")
        private String field;

        ...

    }

}

再在全局异常拦截里进行配置

import com.gecxkj.common.util.ResponseResult;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;

/**
 * @Classname ControllerAdvice
 * @Description 全局处理
 * @Date 2020/4/2 15:11
 * @Created by deedywu
 */
@ControllerAdvice
public class MyControllerAdvice {

    ...

    /**
     * 全局异常捕捉处理
     *
     * @param ex exception
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = Exception.class)
    public ResponseResult errorHandler(Exception ex) {
        ex.printStackTrace();
        ResponseResult rr = new ResponseResult();
        if (ex instanceof BindException) {
            // 获取是否有字段验证的异常
            BindingResult bindingResult = ((BindException) ex).getBindingResult();
            if (bindingResult.hasErrors() && bindingResult.hasFieldErrors()) {
                FieldError fieldError = bindingResult.getFieldError();
                rr.setResult(500, fieldError.getDefaultMessage(), fieldError.getField());
            } else {
                rr.setResult(500, ex.getMessage());
            }
        } else {
            rr.setResult(500, ex.getMessage());
        }
        return rr;
    }
}

 

ResponseResult 类

import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Classname ResponseResult
 * @Description 公共的前端返回
 * @Date 2020/4/1 15:22
 * @Created by deedywu
 */
@Data
@NoArgsConstructor
public final class ResponseResult {

    /**
     * 返回状态码
     */
    private Integer code = 400;

    /**
     * 返回错误信息
     */
    private String msg = "返回错误";

    /**
     * 返回数据
     */
    private Object data;

    public void setResult(Integer code, String msg, Object data) {
        setResult(code, msg);
        this.data = data;
    }

    public void setResult(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

}

最后在controller进行配置 ,入参加入@Valid注解就可以了

@PostMapping("parent")
@ResponseBody
@ApiOperation(value = "父级字典编辑操作", notes = "根据有无id编辑/新增")
public ResponseResult parentEdit(@Valid DictDto.ParentInsert payload) {
    ResponseResult rr = new ResponseResult();
    if (dictService.insert(payload)) {
        rr.setResult(200, "新增字典类型成功!");
    }
    return rr;
}

 

输入一个空置测试成功...

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值