共計 3149 個字符,預計需要花費 8 分鐘才能閱讀完成。
本篇內容介紹了“java 中的 Bean Validation 怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
概念:java 中的 Bean Validation 是一個數(shù)據(jù)驗證的規(guī)范。
說明:Hibernate Validator 是 Bean Validation 的一個具體實現(xiàn)。
舉例:在 springMVC 中使用 Hibernate Validator
1)maven 依賴:dependency
groupId javax.validation /groupId
artifactId validation-api /artifactId
version 1.1.0.Final /version
/dependency
dependency
groupId org.hibernate /groupId
artifactId hibernate-validator /artifactId
version 5.1.2.Final /version
/dependency
2)JavaBean:import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotBlank;
* 在需要進行校驗的屬性上添加相應的注解: *
* 1)Bean Validation 提供的 constraint:
* [@Null](https://my.oschina.net/u/561366) 被注釋的元素必須為 null
* [@NotNull](https://my.oschina.net/notnull) 被注釋的元素必須不為 null
* @AssertTrue 被注釋的元素必須為 true
* [@AssertFalse](https://my.oschina.net/u/2430840) 被注釋的元素必須為 false
* @Min(value) 被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值
* @Max(value) 被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值
* @DecimalMin(value) 被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值
* @DecimalMax(value) 被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值
* @Size(max=, min=) 被注釋的元素的大小必須在指定的范圍內
* @Digits (integer, fraction) 被注釋的元素必須是一個數(shù)字,其值必須在可接受的范圍內
* @Past 被注釋的元素必須是一個過去的日期
* @Future 被注釋的元素必須是一個將來的日期
* @Pattern(regex=,flag=) 被注釋的元素必須符合指定的正則表達式
*
* 2)Hibernate Validator 特有的 constraint: * @NotBlank(message =) 驗證字符串非 null,且長度必須大于 0
* @NotEmpty 被注釋的字符串或集合的必須非空
* @Email 被注釋的元素必須符合 email 的格式
* @Length(min=,max=) 被注釋的字符串的大小必須在指定的范圍內
* @Range(min=,max=,message=) 被注釋的元素必須在合適的范圍內
*
*/
public class User {
@NotBlank(message = name is null!)
private String name;
@NotNull(message = age is null!)
private Integer age;
private String email;
private String address;
// getter and setter ..
3) 控制器:import javax.validation.Valid;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping(/sys)
public class UserController {
* 1. 給需要校驗的參數(shù)添加 @Valid 注解
* 2. 給方法添加一個類型為 BindingResult 的參數(shù),用來封裝 校驗的結果
*/
@RequestMapping(value = /user/add , method = RequestMethod.POST)
public String addUser(@Valid @RequestBody User req, BindingResult bindingResult) {if (bindingResult.hasErrors()) {List ObjectError allErrors = bindingResult.getAllErrors();
List String msgs = new ArrayList String
for (ObjectError objectError : allErrors) {String msg = objectError.getDefaultMessage();
msgs.add(msg);
String paramErrorMsg = StringUtils.join(msgs,
return paramErrorMsg;
} else {
System.out.println( do add user.
return success!
4) 接口測試:地址:http://localhost:8081/jxn-web/api/sys/user/add
請求類型:Content-Type: application/json
{name : , age :null} == 響應內容:age is null! name is null!
{name : , age :} == 響應內容:age is null! name is null!
{name : jack , age : 17} == 響應內容:success!
常見錯誤:
報錯:javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer.
分析:是由于 @NotBlank 修飾了 Integer、Long 等引用類型的屬性
@NotBlank
private Integer age;
修正:應該使用 @NotNull 來修飾引用類型的屬性。@NotNull
private Integer age;
“java 中的 Bean Validation 怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!
正文完