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