普通项目
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.1.0.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
-
编写校验工具(使用validator框架校验工具)
package com.csvn.utils;
import com.csvn.blogs.dto.BlogFileDto;
import org.hibernate.validator.HibernateValidator;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author haizhuangbu
* @date 2024/5/14 12:56
* @mark ValidatorUtils 校验工具
*/
public class ValidatorUtils {
private static Validator validator;
private static final Object lockObj = new Object();
/**
* @param o
* @return 返回异常信息
*/
public static String validator(Object o) {
Validator validation = getValidation();
Set<ConstraintViolation<Object>> validate = validation.validate(o);
String errMessage = validate.stream().map(va -> va.getPropertyPath() + " : " + va.getMessage())
.collect(Collectors.joining(","));
return errMessage;
}
private static Validator getValidation() {
if (validator == null) {
synchronized (lockObj) {
validator = Validation.byProvider(HibernateValidator.class)
.configure().buildValidatorFactory().getValidator();
}
}
return validator;
}
}
BlogFileDto blogFileDto = new BlogFileDto();
String validator1 = ValidatorUtils.validator(blogFileDto);
System.out.println(validator1);
SpringBoot项目
-
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
-
接口使用(在接口实体类直接添加@Valid注解)
@PostMapping("/saveContent")
public Result<String> saveContentInfo(@Valid @RequestBody ContentInfo contentInfo) {
blogsContentInfoService.insertContentInfo(contentInfo);
return Result.of("内容插入成功");
}
-
通过异常拦截 @ControllerAdvice 获取校验异常
package com.csvn.common;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.stream.Collectors;
/**
* @author haizhuangbu
* @date 2024/5/14 17:10
* @mark RequestAdivce
*/
@RestControllerAdvice
public class RequestAdvice {
/**
* @param methodArgumentNotValidException 方法参数校验异常
* @return 异常信息
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Result methodError(MethodArgumentNotValidException methodArgumentNotValidException) {
String errorMsg = methodArgumentNotValidException.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.joining(","));
return Result.error(errorMsg);
}
}
拓展自定义实现参数校验(字典项校验)
-
自定义实现注解
package com.csvn.utils.common;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Constraint(
validatedBy = {NotInMap.NotInMapImp.class}
)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface NotInMap {
String key(); // 字典码值
String message() default "不存在字典项";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
-
自定义校验规则
class NotInMapImp implements ConstraintValidator<NotInMap, String> {
String key;
@Override
public void initialize(NotInMap annotation) {
key = annotation.key();
ConstraintValidator.super.initialize(annotation);
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 查询数据库 通过key
// select * from s_cde where key = #{key}
return false; // obj == null
}
}
-
最终结果
详细校验项(最大值、最小值....注解)https://mp.csdn.net/mp_blog/creation/editor/135977372