Heim >
Java >
javaLernprogramm >
So verwenden Sie das SpringBoot-Parameterüberprüfungs-Validator-Framework
So verwenden Sie das SpringBoot-Parameterüberprüfungs-Validator-Framework
WBOY
Freigeben: 2023-05-22 23:28:19
nach vorne
1683 Leute haben es durchsucht
Wie SpringBoot die Parameterüberprüfung durchführt
Um zu verhindern, dass illegale Parameter das Geschäft beeinträchtigen, ist es häufig erforderlich, die Parameter der Schnittstelle zu überprüfen. Beispielsweise müssen Sie beim Anmelden überprüfen, ob der Benutzername vorhanden ist und Passwort sind leer. Benutzer müssen überprüfen, ob die E-Mail- und Mobiltelefonnummernformate korrekt sind. Es wäre zu umständlich, sich auf Code zu verlassen, um die Schnittstellenparameter einzeln zu überprüfen, und die Lesbarkeit des Codes wäre äußerst schlecht.
Validator-Framework soll Entwicklern helfen, weniger Code zu schreiben und die Entwicklungseffizienz während der Entwicklung zu verbessern; Validator wird speziell zur Überprüfung von Schnittstellenparametern verwendet, wie z. B. allgemein erforderliche Überprüfung, Überprüfung des E-Mail-Formats, und der Benutzername muss zwischen 6 und 1 liegen 12 usw.
Das Validator-Verifizierungsframework folgt der JSR-303-Verifizierungsspezifikation (Parameterverifizierungsspezifikation JSR ist die Abkürzung für Java Specification Requests). Java Specification Requests的缩写。
Hinweis: Ab springboot-2.3 wurde das Verifizierungspaket in ein < code>starter-Komponente, daher müssen Validierung und Web eingeführt werden, während Versionen vor springboot-2.3 nur Webabhängigkeiten einführen müssen.
Annotation
Funktion
@AssertFalse
kann null sein, wenn nicht null, muss es falsch sein
@AssertTrue
kann null sein, wenn nicht, muss es sein wahr sein
@DecimalMax
Die Einstellung darf den Maximalwert nicht überschreiten
@DecimalMin
Die Einstellung darf den Minimalwert nicht überschreiten
@Digits
Die Einstellung muss eine Zahl und die Anzahl der Ziffern sein Die Ganzzahl und die Anzahl der Dezimalstellen müssen innerhalb des angegebenen Bereichs liegen aktuelles Datum
@Max
Das Maximum darf dieses Maximum nicht überschreiten
@Min
Das Maximum darf nicht kleiner als dieser Mindestwert sein
@NotNull
kann nicht null sein, es kann sein leer
@Null
muss null sein
@Pattern
Muss den angegebenen regulären Ausdruck erfüllen
@Size
Der size()-Wert von Sammlungen, Arrays, Karten usw. muss innerhalb liegen Der angegebene Bereich muss im angegebenen Bereich liegen trim() darf nicht gleich „“ sein
@Range
Der Wert muss innerhalb des angegebenen Bereichs liegen
POST http://localhost:8080/valid/test2
Content-Type: application/x-www-form-urlencoded
id=1&name=javadaily&level=12&email=476938977@qq.com&appId=ab1cdddd&sex=N
@Slf4j
public class UserValidation<T extends Annotation> implements ConstraintValidator<T, User> {
protected Predicate<User> predicate = c -> true;
@Resource
protected UserRepository userRepository;
@Override
public boolean isValid(User user, ConstraintValidatorContext constraintValidatorContext) {
return userRepository == null || predicate.test(user);
}
/**
* 校验用户是否唯一
* 即判断数据库是否存在当前新用户的信息,如用户名,手机,邮箱
*/
public static class UniqueUserValidator extends UserValidation<UniqueUser>{
@Override
public void initialize(UniqueUser uniqueUser) {
predicate = c -> !userRepository.existsByUserNameOrEmailOrTelphone(c.getUserName(),c.getEmail(),c.getTelphone());
}
}
/**
* 校验是否与其他用户冲突
* 将用户名、邮件、电话改成与现有完全不重复的,或者只与自己重复的,就不算冲突
*/
public static class NotConflictUserValidator extends UserValidation<NotConflictUser>{
@Override
public void initialize(NotConflictUser notConflictUser) {
predicate = c -> {
log.info("user detail is {}",c);
Collection<User> collection = userRepository.findByUserNameOrEmailOrTelphone(c.getUserName(), c.getEmail(), c.getTelphone());
// 将用户名、邮件、电话改成与现有完全不重复的,或者只与自己重复的,就不算冲突
return collection.isEmpty() || (collection.size() == 1 && collection.iterator().next().getId().equals(c.getId()));
};
}
}
}
Nach dem Login kopieren
这里使用Predicate函数式接口对业务规则进行判断。
4.3. 测试代码
@RestController
@RequestMapping("/senior/user")
@Slf4j
@Validated
public class UserController {
@Autowired
private UserRepository userRepository;
@PostMapping
public User createUser(@UniqueUser @Valid User user){
User savedUser = userRepository.save(user);
log.info("save user id is {}",savedUser.getId());
return savedUser;
}
@SneakyThrows
@PutMapping
public User updateUser(@NotConflictUser @Valid @RequestBody User user){
User editUser = userRepository.save(user);
log.info("update user is {}",editUser);
return editUser;
}
}
Nach dem Login kopieren
使用很简单,只需要在方法上加入自定义注解即可,业务逻辑中不需要添加任何业务规则的代码。
POST http://localhost:8080/valid/add
Content-Type: application/json
/senior/user
{
"userName" : "100001"
}
Das obige ist der detaillierte Inhalt vonSo verwenden Sie das SpringBoot-Parameterüberprüfungs-Validator-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn