优雅地进行接口参数校验

本文介绍了如何使用Java注解进行接口参数校验,包括NotNull、NotBlank、Length等,以及如何引入Hibernate Validator依赖。通过编写校验类进行验证并输出结果,最后展示了如何将校验与Spring Controller结合,实现请求参数的有效性检查。同时,还展示了嵌套校验的用法,确保复杂对象的属性也能够得到正确验证。
摘要由CSDN通过智能技术生成

定义域模型

import java.util.List;

import javax.annotation.Nullable;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Length;

import lombok.Data;

@Data
public class User {

	@NotNull(message = "not null")
	private Integer userId;//用户ID
	
	@NotBlank(message = "not blank")
	private String userName;//用户名
	
	@Nullable
	@Length(min = 3, max = 5, message = "not in [3,5]")
	private String sex;//性别
	
	@Nullable
	@Min(value = 1, message = "not >= 1")
	@Max(value = 100, message = "not <= 100")
	private Integer age;//年龄
	
	@Nullable
	@Pattern(regexp = "[\\w]+@[\\w]+.com", message = "not email")
	private String email;//邮箱
	
	@Nullable
	@Size(min = 1, max = 3, message = "size not in [1,3]")
	private List<String> professions;//职业
}

注解解析

注解说明
@NotNull不能为NULL
@NotBlank不能为空格
@Nullable可以为空
@Length字符串长度限制
@Min数字边界值限制
@Max数字边界值限制
@Pattern正则表达式限制
@Size数组列表长度限制

引入依赖

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.18</version>
    </dependency>
    <dependency>
       <groupId>javax.el</groupId>
       <artifactId>javax.el-api</artifactId>
       <version>3.0.0</version>
    </dependency>
    <dependency>
       <groupId>org.glassfish.web</groupId>
       <artifactId>javax.el</artifactId>
       <version>2.2.4</version>
    </dependency>
    <dependency>
       <groupId>com.google.code.findbugs</groupId>
       <artifactId>jsr305</artifactId>
       <version>3.0.2</version>
    </dependency>
    <dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
       <version>6.0.9.Final</version>
    </dependency>

编写校验类

import java.util.Set;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

public class UserValidator {

	public static void validate(User user) {
		ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        Set<ConstraintViolation<User>> violations = validator.validate(user);
        if (violations != null) {
            violations.forEach(violation -> {
            	System.out.println(violation.getPropertyPath() + ":" + violation.getMessage());
            });
        }
	}

输出结果

userId:not null
userName:not blank
sex:not in [3,5]
age:not <= 100
email:not email
professions:size not in [1,3]

与spring controller整合

import javax.validation.Valid;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

	@RequestMapping("/user/doAction")
	public String doAction(@Valid @RequestBody User user) {
		return "success";
	}
}

嵌套校验

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import lombok.Data;

@Data
public class User {

	@Valid
	private CreditCard creditCard;//信用卡
	
	public static class CreditCard {
		
		@NotBlank(message = "not blank")
		private String cardNo;
		
		@NotNull(message = "not null")
        private Double cardMoney;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值