一、驗證用到的注解
@Valid | 對傳到后台的參數的驗證 |
@BindingResult | 配合@Valid使用,驗證失敗后的返回 |
二、示例
1.傳統方式
@PostMapping public User create(@RequestBody User user){ if(StringUtils.isBlank(user.getPassword())){ } //代碼省略... return user; }
2.采用新注解的方式
1)默認的校驗
package com.knyel.dto; import com.fasterxml.jackson.annotation.JsonView; import org.hibernate.validator.constraints.NotBlank; import java.util.Date; public class User { public interface UserSimpleView {}; public interface UserDetailView extends UserSimpleView {}; private String id; private String username; @NotBlank private String password; private Date birthday; @JsonView(UserSimpleView.class) public String getUsername (){ return username; } public void setUsername (String username){ this.username = username; } @JsonView(UserDetailView.class) public String getPassword (){ return password; } public void setPassword (String password){ this.password = password; } @JsonView(UserSimpleView.class) public String getId (){ return id; } @JsonView(UserSimpleView.class) public void setId (String id){ this.id = id; } public Date getBirthday (){ return birthday; } public void setBirthday (Date birthday){ this.birthday = birthday; } @Override public String toString (){ return "User{" + "id='" + id + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + ", birthday=" + birthday + '}'; } }
@PostMapping public User create(@Valid @RequestBody User user, BindingResult errors){ if(errors.hasErrors()){ errors.getAllErrors().stream().forEach(error-> System.out.println(error.getDefaultMessage())); } //業務處理... user.setId("1"); return user; }
輸出結果為
may not be empty
也就是應該不能為空
2)自定義校驗的錯誤消息
package com.knyel.dto; import com.fasterxml.jackson.annotation.JsonView; import org.hibernate.validator.constraints.NotBlank; import javax.validation.constraints.Past; import java.util.Date; public class User { public interface UserSimpleView {}; public interface UserDetailView extends UserSimpleView {}; private String id; private String username; @NotBlank(message="密碼不能為空") private String password; @Past(message = "生日必須是過去的時間") private Date birthday; @JsonView(UserSimpleView.class) public String getUsername (){ return username; } public void setUsername (String username){ this.username = username; } @JsonView(UserDetailView.class) public String getPassword (){ return password; } public void setPassword (String password){ this.password = password; } @JsonView(UserSimpleView.class) public String getId (){ return id; } @JsonView(UserSimpleView.class) public void setId (String id){ this.id = id; } public Date getBirthday (){ return birthday; } public void setBirthday (Date birthday){ this.birthday = birthday; } @Override public String toString (){ return "User{" + "id='" + id + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + ", birthday=" + birthday + '}'; } }