spring mvc controller中的參數驗證機制(一)


一、驗證用到的注解

@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 + '}';
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM