话不多说,直接上代码,优雅就完事儿了
一、依赖:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.1.Final</version>
</dependency>
二、代码:
1、controller 代码:
在入参 Bean 前添加此注解 @Validated
import com.pph.model.request.ValidatedDemoReq;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* @author pph
* @date 2020/5/12 17:45
* @description
*/
@RestController
@RequestMapping("/validation")
public class ValidationTestController {
/**
* Bean 入参校验框架测试
*
* @param req 入参
* @return 结果
*/
@RequestMapping(value = "/test", method = RequestMethod.GET)
public Object test(@RequestBody @Validated ValidatedDemoReq req) {
return req.toString();
}
/**
* Bean 入参校验框架测试(分组)
*
* @param req 入参
* @return 结果
*/
@RequestMapping(value = "/test/group", method = RequestMethod.GET)
public Object test(@RequestBody @Validated(value = GroupTest.class) ValidatedDemoReq req) {
return req.toString();
}
}
2、自定义注解:
实现 ConstraintValidator 接口并引用到注解中
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import static java.util.stream.Collectors.toList;
/**
* @author pph
* @date 2020/5/12 13:57
* @description 校验只能为指定的某些值
*/
@Documented
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = Contains.ContainsValidator.class)
public @interface Contains {
String message() default "必须传入 contains 指定其中的某个值"