關(guān)于@NotNull注解失效的原因之一
@NotNull注解失效原因之一
給String類型加上@NotNull注解時(shí),只有傳入的參數(shù)為空時(shí)才會報(bào)異常,當(dāng)傳入的為空字符串時(shí)并不會報(bào)異常,就會出現(xiàn)報(bào)異常的現(xiàn)象
傳參為空指的是該參數(shù)就沒有傳,為空字符串指的是有該參數(shù)但是是雙引號""
Lombok判斷注解怎么使用,
梳理下來為
@NotEmpty用在集合類上@NotBlank用在String上@NotNull用在基本類型上
最后最重要的是,在接口參數(shù)前加注解’@Validated’
@Valid注解是什么
@Valid
用于驗(yàn)證注解是否符合要求,直接加在變量user之前,在變量中添加驗(yàn)證信息的要求,當(dāng)不符合要求時(shí)就會在方法中返回message 的錯(cuò)誤提示信息。
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping
public User create (@Valid @RequestBody User user) {
System.out.println(user.getId());
System.out.println(user.getUsername());
System.out.println(user.getPassword());
user.setId("1");
return user;
}
} 然后在 User 類中添加驗(yàn)證信息的要求:
public class User {
private String id;
@NotBlank(message = "密碼不能為空")
private String password;
}@NotBlank 注解所指的 password 字段,表示驗(yàn)證密碼不能為空,如果為空的話,上面 Controller 中的 create 方法會將message 中的"密碼不能為空"返回。
當(dāng)然也可以添加其他驗(yàn)證信息的要求:
| 限制 | 說明 |
|---|---|
| @Null | 限制只能為null |
| @NotNull | 限制必須不為null |
| @AssertFalse | 限制必須為false |
| @AssertTrue | 限制必須為true |
| @DecimalMax(value) | 限制必須為一個(gè)不大于指定值的數(shù)字 |
| @DecimalMin(value) | 限制必須為一個(gè)不小于指定值的數(shù)字 |
| @Digits(integer,fraction) | 限制必須為一個(gè)小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction |
| @Future | 限制必須是一個(gè)將來的日期 |
| @Max(value) | 限制必須為一個(gè)不大于指定值的數(shù)字 |
| @Min(value) | 限制必須為一個(gè)不小于指定值的數(shù)字 |
| @Past | 限制必須是一個(gè)過去的日期 |
| @Pattern(value) | 限制必須符合指定的正則表達(dá)式 |
| @Size(max,min) | 限制字符長度必須在min到max之間 |
| @Past | 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早 |
| @NotEmpty | 驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) |
| @NotBlank | 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會去除字符串的空格 |
| 驗(yàn)證注解的元素值是Email,也可以通過正則表達(dá)式和flag指定自定義的email格式 |
除此之外還可以自定義驗(yàn)證信息的要求,例如下面的 @MyConstraint:
public class User {
private String id;
@MyConstraint(message = "這是一個(gè)測試")
private String username;
}注解的具體內(nèi)容:
@Constraint(validatedBy = {MyConstraintValidator.class})
@Target({ELementtype.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyConstraint {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}下面是校驗(yàn)器:
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {
@Autowired
private UserService userService;
@Override
public void initialie(@MyConstraint constarintAnnotation) {
System.out.println("my validator init");
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
userService.getUserByUsername("seina");
System.out.println("valid");
return false;
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql數(shù)據(jù)庫基礎(chǔ)知識點(diǎn)與操作小結(jié)
這篇文章主要介紹了mysql數(shù)據(jù)庫基礎(chǔ)知識點(diǎn)與操作,總結(jié)分析了mysql數(shù)據(jù)庫修改數(shù)據(jù)表、增刪改查及數(shù)據(jù)庫函數(shù)基本功能,需要的朋友可以參考下2020-01-01
同時(shí)運(yùn)行多個(gè)MySQL服務(wù)器的方法
在同一臺機(jī)器上運(yùn)行多個(gè)有些情況下你可能想要在同一臺機(jī)器上運(yùn)行多個(gè)服務(wù)器。例如,你可能想要測試一個(gè)新的MySQL版本而讓你現(xiàn)有生產(chǎn)系統(tǒng)的設(shè)置不受到干擾, 或你可能是想要為不同的客戶提供獨(dú)立的MySQL安裝一個(gè)因特網(wǎng)服務(wù)供應(yīng)商。2008-05-05

