参数校验

174 阅读1分钟

导入相应的坐标

<!--jsr 303-->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<!-- hibernate validator-->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.0.Final</version>
</dependency>

实体类


@Data
public class UserInfo {

    @NotNull(groups = {GroupA.class}, message = "用户id不能为空")
    private Integer uid;

    @NotBlank(message = "用户名不能为空")
    @Length(max = 15, message = "用户名不能超过20个字符")
    @Pattern(regexp = "^[\u4E00-\u9FA5A-Za-z0-9\*]*$", message = "用户昵称限制:最多20字符,包含文字、字母和数字")
    private String name;

    @NotBlank(groups = {GroupB.class}, message = "性别不能为空")
    private String gender;


    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
    private String phone;

    @NotEmpty
    private List<Hobby> hobbies;
}

分组

对不同的controller 接收的参数做处理,有分组标识的才会进行校验

public interface GroupA {
}

接收异常

BindingResult bindingResult
public String setUser(@RequestBody @Validated({ GroupB.class}) UserInfo user, BindingResult bindingResult) {
private void validData(BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        StringBuffer sb = new StringBuffer();
        for (ObjectError error : bindingResult.getAllErrors()) {
            sb.append(error.getDefaultMessage());
        }
        throw new ValidationException(sb.toString());
    }
}

使用


@RestController
public class ValidController {

    @PostMapping("/getUser")
    public String getUserInfo(@RequestBody @Validated({GroupA.class, Default.class}) UserInfo userInfo, BindingResult bindingResult) {

        validData(bindingResult);
        return "success" + userInfo.toString();
    }

    @PostMapping("/setUser")
    public String setUser(@RequestBody @Validated({ GroupB.class}) UserInfo user, BindingResult bindingResult) {
        validData(bindingResult);
        return "name: " + user.getName() + ", phone:" + user.getPhone();
    }

    private void validData(BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            StringBuffer sb = new StringBuffer();
            for (ObjectError error : bindingResult.getAllErrors()) {
                sb.append(error.getDefaultMessage());
            }
            throw new ValidationException(sb.toString());
        }
    }
}