SpringMVC參數校正,springmvc校正

來源:互聯網
上載者:User

SpringMVC參數校正,springmvc校正
使用SpringMVC時配合hibernate-validate進行參數的合法性校正,能節省一定的代碼量.

 

使用步驟

 

1.搭建Web工程並引入hibernate-validate依賴
<dependency>    <groupId>org.hibernate.validator</groupId>    <artifactId>hibernate-validator</artifactId>    <version>6.0.7.Final</version></dependency> 

 

Maven依賴傳遞,自動依賴validation-api、jboss-logging、classmate

 

2.使用校正註解標註在屬性上(dto)

 

 

*每個註解都有message屬性,該屬性用於填寫校正失敗時的異常描述資訊,當校正失敗時可以擷取對應的message屬性值.

 

public class User {    @NotNull(message="id不可為空!")    private Integer id;        @NotBlank(message="使用者名稱不可為空!")
@Size(min=4,max=12,message="使用者名稱的長度在4~12之間!") private String username; @NotBlank(message="密碼不可為空!") private String password; @Email(message="非法郵箱!") private String email; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public User() { super(); }}

 

 

3.控制層中使用dto接收參數並使用@Validated/@Valid註解開啟對參數的校正

 

 *@Validated註解表示使用Spring的校正機制,支援分組校正,聲明在入參上.

 *@Valid註解表示使用Hibernate的校正機制,不支援分組校正,聲明在入參上.

 *在dto後面要緊跟BindingResult對象,該對象用於擷取當校正失敗時的異常資訊.

@RestControllerpublic class BaseController {    @RequestMapping("/test")    public User test(@Validated User user, BindingResult result) {        if (result.hasErrors()) {            List<ObjectError> errors = result.getAllErrors();            for (ObjectError error : errors) {                System.out.println(error.getDefaultMessage());            }        }        return user;    }}

 

示範:

 

 結果:

密碼不可為空!id不可為空!使用者名稱的長度在4~12之間!

 

*校正的順序是隨機的,因此程式不能依賴校正的順序去做相關的邏輯處理.

 

4.分組校正

 

每個校正註解都有group屬性用於指定校正所屬的組,其值是Class數組,在Controller中使用@Validated註解開啟對參數的校正時指定要進行校正的組,那麼只有組相同的屬性才會被進行校正(預設全匹配).

Class<?>[] groups() default { };

 

一般定義標識介面作為組資源

public interface GroupA {}public interface GroupB {}

 

使用校正註解標註在屬性上並進行分組

public class User {    @NotNull(message="id不可為空!",groups = {GroupA.class})    private Integer id;        @NotBlank(message="使用者名稱不可為空!",groups = {GroupB.class})    @Size(min=4,max=12,message="使用者名稱的長度在4~12之間!")    private String username;    @NotBlank(message="密碼不可為空!")    private String password;        @Email(message="非法郵箱!")    private String email;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public User() {        super();    }}

 

 Controller中使用@Validated註解開啟對參數的校正並指定校正的組,那麼只有組相同的屬性才會被進行校正(預設全匹配),

@RestControllerpublic class BaseController {    @RequestMapping("/test")    public User test(@Validated(value= {GroupB.class}) User user, BindingResult result) {        if (result.hasErrors()) {            List<ObjectError> errors = result.getAllErrors();            for (ObjectError error : errors) {                System.out.println(error.getDefaultMessage());            }        }        return user;    }}

 

示範:

 

結果:

使用者名稱不可為空!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.