Введение
Эта статья о знании проверки параметров Springboot, конечно, она также применима к другим приложениям Java; после прочтения этой статьи вы узнаете базовую проверку параметров, проверку пользовательских параметров и проверку групповых параметров; хорошие спецификации кода и методы написания как проза Версия красивая и утонченная, струящаяся, как облака и текущая вода;
публика:искатель знаний
Искатель знаний (Наследуя дух открытого исходного кода, Распространение знаний о технологиях;)
2 Начало работы с калибровкой
2.1 pom.xml
springboot уже включает пакет валидатора в веб-стартер
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Для проектов без Springboot вам необходимо самостоятельно вводить зависимости
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId>
<version>3.0.3</version>
</dependency>
2.2 Описание общих ограничений
-
@Null: элемент нулевой -
@NotNull: элемент не нулевой -
@AssertTrue: элемент истинен -
@AssertFalse: элемент является ложным -
@Min(value): значение числа больше или равно указанному минимальному значению. -
@Max(value): значение числа меньше или равно указанному максимальному значению. -
@DecimalMin(value): большое значение больше или равно указанному минимальному значению. -
@DecimalMax(value): максимальное значение меньше или равно указанному максимальному значению -
@Size(max=, min=): размер элемента находится в пределах указанного диапазона -
@Digits (integer, fraction): Элемент представляет собой число, значение которого должно быть в допустимом диапазоне. -
@Past: прошедшая дата -
@Future: будущая дата -
@Pattern(regex=,flag=): указанное регулярное выражение -
@URL: должен быть URL -
@Email: должно быть в формате электронной почты -
@NotBlank: строка не может быть пустой -
@NotEmpty: Коллекция не может быть пустой -
@Length: Длина должна быть в пределах указанного диапазона -
@Valid: проверка класса сущности
2.4 Пример ограничения сущности
- Пример использования в качестве простой аннотации ограничений;
- Если член является юридическим лицом, необходимо принести
@Validаннотация;
/**
* @Author lsc
* <p> </p>
*/
@Data
public class SysUser {
private Long id;
@NotNull(message ="用户名不能为空")
@Size(min = 3, max = 5, message = "用户名长度为{min}-{max}之间")
private String username;
@NotNull(message ="昵称不能为空")
private String name;
@NotNull(message ="密码不能为空")
private String password;
@Email(message = "邮箱格式不合法")
private String email;
private String gender;
}
2.5 Пример плоскости управления
- нужно добавить в класс
@Validated; - Если параметр является сущностью, его необходимо добавить
@Validаннотация
/**
* @Author lsc
* <p> </p>
*/
@RestController
@Validated
public class SysUserController {
// 方法参数为实体校验
@PostMapping("/register")
public ResponseEntity register(@Valid @RequestBody SysUser sysUser){
return ResponseEntity.ok(sysUser);
}
// 方法参数校验
@GetMapping("user")
public ResponseEntity getUser(@NotNull(message ="用户名不能为空") String username) {
SysUser sysUser = new SysUser();
sysUser.setName("知识追寻者");
return ResponseEntity.ok(sysUser);
}
}
2.6 Перехват исключений
Глобальный захват исключения, когда проверка параметра недействительна, исключение захватывается и возвращается во внешний интерфейс;
/**
* @Author lsc
* <p> </p>
*/
@ControllerAdvice
public class GlobHandler {
// 捕获方法参数校验异常
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
public ResponseEntity constraintViolationExceptionHandler(ConstraintViolationException e){
Set<ConstraintViolation<?>> message = e.getConstraintViolations();
HashMap<String, Object> map = new HashMap<>();
message.stream().forEach(msg -> {
String path = msg.getPropertyPath().toString();
String field = path.substring(path.indexOf(".")+1);
map.put(field,msg.getMessageTemplate());
});
return ResponseEntity.ok(map);
}
// 捕获实体参数校验异常
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseEntity resolveMethodArgumentNotValidException(MethodArgumentNotValidException e){
List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
HashMap<String, Object> map = new HashMap<>();
allErrors.stream().forEach(error -> {
FieldError fieldError = (FieldError) error;
map.put(fieldError.getField(), fieldError.getDefaultMessage());
});
return ResponseEntity.ok(map);
}
}
2.7 Пример запроса
Три настраиваемых правила проверки
Специальные поля требуют пользовательских правил, такие как идентификационный номер, электронная почта, телефон и т. Д.;
определить аннотации проверки
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
@Constraint(validatedBy = GenderValidator.class)
@Documented
public @interface Gender {
String message() default "性别为男或者女";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default {};
}
GenderValidator реализует интерфейс ConstraintValidator и предоставляет правила проверки.
/**
* @Author lsc
* <p> </p>
*/
public class GenderValidator implements ConstraintValidator<Gender, String> {
// 初始化校验值
@Override
public void initialize(Gender constraintAnnotation) {
}
// 校验规则
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return "男".equals(value) || "女".equals(value);
}
}
Используйте аннотации к переменным-членам
@Gender()
private String gender;
Четырехгрупповая проверка
По умолчанию, если группа не указана, она принадлежит к группе по умолчанию, использование групповой проверки способствует развитию иерархической проверки;
Создайте два новых интерфейса, один для запросов и один для добавления
/**
* @Author lsc
* <p> </p>
*/
public interface ADD extends Default {
}
public interface Select extends Default {
}
Изменить правила проверки объекта,Если группа не указана, по умолчанию используется группа по умолчанию;
@NotNull(message ="用户名不能为空",groups = ADD.class)
@Size(min = 3, max = 5, message = "用户名长度为{min}-{max}之间")
private String username;
@NotNull(message ="昵称不能为空", groups = Select.class)
private String name;
@NotNull(message ="密码不能为空",groups = ADD.class)
private String password;
@Email(message = "邮箱格式不合法", groups = Select.class)
private String email;
Пример уровня управления, в настоящее время будут проверены только группа ДОБАВИТЬ и группа по умолчанию.
// 分组校验
@PostMapping("/user")
public ResponseEntity addUser(@Validated(value = ADD.class) @RequestBody SysUser sysUser){
return ResponseEntity.ok(sysUser);
}
Пять справочных документов
docs.JBoss.org/hibernate/… — это…
blog.CSDN.net/just easy_etc...
у-у-у. Краткое описание.com/afraid/89ah675not7from…
Подписывайтесь на искателей знаний: