Springboot 后台参数校验

1.导包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.实体校验类型

@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class Websites implements Serializable {

    private static final long serialVersionUID = 4162334049119728731L;

    private Integer id;
    @NotNull(message = "name不能为空")
    private String name;
    @NotNull(message = "url不能为空")
    private String url;
    @NotNull(message = "alexa不能为空")
    private Integer alexa;
    @NotNull(message = "country不能为空")
    private String country;
}
/**
 * 保存一个网址对象
 * http://localhost:8080/saveWebsites
 */
@PostMapping("/saveWebsites")
public String saveWebsites(@RequestBody @Valid Websites websites) {
    // 判断是否含有校验不匹配的参数错误
    /*if (bindingResult.hasErrors()) {
        // 获取所有字段参数不匹配的参数集合
        List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
        Map<String, Object> result = new HashMap<>(fieldErrorList.size());
        fieldErrorList.forEach(error -> {
            // 将错误参数名称和参数错误原因存于map集合中
            result.put(error.getField(), error.getDefaultMessage());
        });
        log.info("============判断是否含有校验不匹配的参数错误==============");
        return result.toString();
    }*/
    log.info("======================是否执行");
    boolean flag = websitesService.saveWebsites(websites);
    if (flag) {
        log.info(websites.toString());
    } else {
        log.info("保存失败");
    }
    return "hello,world!" + flag;
}

3.单值校验

注意在类上面添加  @Validated

@Slf4j
@RestController
@Validated
public class IndexController {

    @CrossOrigin
    @PostMapping("/index")
    public String index(@NotNull(message = "username不能为空") String username) {
        //String a = URLEncoder.encode(username);
        //a = URLDecoder.decode(username);

        log.info("==============" + username);
        return username;
    }

}

4.全局捕获校验异常

/**
 * 单个参数校验异常
 */
@ExceptionHandler(ConstraintViolationException.class)
public List<String> constraintViolationException(ConstraintViolationException e) {
    log.error("单个参数校验异常");
    List<String> defaultMsg = e.getConstraintViolations()
            .stream()
            .map(ConstraintViolation::getMessage)
            .collect(Collectors.toList());
    return  defaultMsg;
}

/**
 *实体参数校验
 * @param e
 * @return
 */
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map<String, Object> methodArgumentNotValidException(MethodArgumentNotValidException e){
    BindingResult bindingResult = e.getBindingResult();
    // 获取所有字段参数不匹配的参数集合
    List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
    Map<String, Object> result = new HashMap<>(fieldErrorList.size());
    fieldErrorList.forEach(error -> {
        // 将错误参数名称和参数错误原因存于map集合中
        result.put(error.getField(), error.getDefaultMessage());
    });
    log.info("========参数校验异常=========");
    return result;
}

常用验证注解

常用的注解主要有以下几个,作用及内容如下所示
@Null,标注的属性值必须为空

@NotNull,标注的属性值不能为空

@AssertTrue,标注的属性值必须为true

@AssertFalse,标注的属性值必须为false

@Min,标注的属性值不能小于min中指定的值

@Max,标注的属性值不能大于max中指定的值

@DecimalMin,小数值,同上

@DecimalMax,小数值,同上

@Negative,负数

@NegativeOrZero,0或者负数

@Positive,整数

@PositiveOrZero,0或者整数

@Size,指定字符串长度,注意是长度,有两个值,min以及max,用于指定最小以及最大长度

@Digits,内容必须是数字

@Past,时间必须是过去的时间

@PastOrPresent,过去或者现在的时间

@Future,将来的时间

@FutureOrPresent,将来或者现在的时间

@Pattern,用于指定一个正则表达式

@NotEmpty,字符串内容非空

@NotBlank,字符串内容非空且长度大于0

@Email,邮箱

@Range,用于指定数字,注意是数字的范围,有两个值,min以及max

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值