java springmvc參數驗證


驗證參數對我接觸過的框架來說就struts2有自帶參數驗證,對於springmvc來說以前的項目只能一個個來驗證

接下來分享一下springmvc怎么驗證參數,讓前端調用接口的時候能能很清楚的了解有那個值沒傳

這里要擁戴hibernate的一個jar

     <!-- 參數驗證 -->
        <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.0.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>el-api</artifactId>
            <version>2.2</version>
        </dependency>

在創建一個實體的驗證類(這里我用的是登陸需要賬號密碼)

package com.yuanxinbuluo.service.user.valid;

import java.io.Serializable;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.groups.Default;
import com.yuanxinbuluo.util.valid.group.GroupB;

/**
 * 用戶驗證實體*/
public class UserValid implements Serializable{

    private static final long serialVersionUID = 4615558843543647320L;
    /**
     * 用戶名稱
     */
    @NotNull(message="用戶名不能為空")
    private String userNm;/**
     * 用戶密碼
     */
    @Size(min=6 ,max= 20 ,message = "密碼長度不符合標准")
    private String userPwd;
    
    public String getUserNm() {
        return userNm;
    }
    public void setUserNm(String userNm) {
        if(!userNm.trim().equals("")){
            this.userNm = userNm;
        }
    }public String getUserPwd() {
        return userPwd;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
}

接下來在控制器用對象封裝傳過來的值

   @ResponseBody
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public Map<String, Object> login(@Validated  UserValid user, BindingResult result){
        
        /**
         * 驗證
         */
        if(result.hasErrors()){
            List<FieldError> error = result.getFieldErrors();
            String msg = error.get(0).getDefaultMessage();
            return super.result(RequestHttpCode.SC_BAD_REQUEST, msg);
        }
      --業務--    }

   好了,user這個類是剛剛創建的驗證參數的驗證實體類,BindingResult 是一個驗證,如果傳過來的值不符合剛剛在實體類的注解時,調用方法

hasErrors() 如果有錯誤返回true否則false 后面代碼只是獲取錯誤定義返回message

這時候調試的時候,獲取的message是無序的,怎么能做到有序呢,

創建幾個類
package com.yuanxinbuluo.util.valid.group;

import javax.validation.GroupSequence;
import javax.validation.groups.Default;

/**
 * 驗證順序接口*/
@GroupSequence( { Default.class, GroupA.class, GroupB.class })
public interface Group {

}
package com.yuanxinbuluo.util.valid.group;

/**
 * 驗證順序接口*/
public interface GroupA {

}
package com.yuanxinbuluo.util.valid.group;


/**
 * 驗證順序接口*/
public interface GroupB {

}

這是在把user這個類添加group

   /**
     * 用戶號碼
     */
   @NotNull(message="用戶名不能為空", groups = Default.class) 
private String userNm;
/** * 用戶密碼 */ @Size(min=6 ,max= 20 ,message = "密碼長度不符合標准", groups = GroupA.class) private String userPwd;
    @ResponseBody
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public Map<String, Object> login(@Validated(Group.class)  UserValid user, BindingResult result){
    }

這個時候他會去先去檢驗用戶名在密碼,當一個驗證實體類的屬性,有幾個屬性是一個接口驗證,另外幾個屬性是另外一個接口驗證,

這種情況也可以用上面去分組

groups 是可以有多個

 


免責聲明!

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



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