springMVC字段校验的问题

李家二狗 发布于 2016/05/17 17:46
阅读 1K+
收藏 0

我在使用SpringMVC的时候,需要对输入的参数进行校验,因此引入了Hibernate Validator的bean validation功能,于是在SpringMVC的Controller中可以进行如下校验:

public Object signIn(@Valid @ModelAttribute(value="user") User user,
     BindingResult br) {
        
    return null;
}



但是我目前有一些功能希望不仅仅使用bean validation的功能,我只想对某一些字段进行单独的校验,比如:

public Object signIn(@Valid String username, BindingResult br) {
        
    return null;
}

那请教下Hibernate Validator是否有类似的功能,如果有,能否提供相关的资料,非常感谢!

加载中
0
呵呵砰砰砰

 

 
public class UserLoginDAO {
	@NotNull
	public UserLogin findUserInfo(@NotNull String userName) {

		return null;
	}

	/**
	 * @Size(min=, max=) String, Collection, Map and arrays
	 * 
	 * @return
	 */
	@Size(min = 1,max=100)
	public List<UserLogin> findUserInfoList() {

		return null;
	}

}



UserLoginDAO object = new UserLoginDAO();

  Method method = UserLoginDAO.class.getMethod("findUserInfo", String.class);

  Object[] parameterValues = { null };

  Set<ConstraintViolation<UserLoginDAO>> violations = executableValidator.validateParameters(

    object,

    method,

    parameterValues

  );

  System.out.println(violations.size());

  for (ConstraintViolation<UserLoginDAO> constraintViolation : violations) {
   System.out.println("对象属性:" + constraintViolation.getPropertyPath());
   System.out.println("国际化key:" + constraintViolation.getMessageTemplate());
   System.out.println("错误信息:" + constraintViolation.getMessage());
  }


ExecutableValidator#validateParameters()

0
maradona
maradona

由于不会用别人的,所以自己写了个

如果有时间还不如自己写一个,这种简单的东西,搞明白别人全部设计思路,都够自己写好几个出来了...

0
彩云小斯
彩云小斯

你想验证哪个字段,就在那个字段上加个类似@Size(min =1,max=100) 这样的注解就行


0
V
Vacoor

验证组, 

@Size(min=1, max=100, group={CreateGroup.class, UpdateGroup.class})

@Validated({CreateGroup.class})   // controller 方法参数验证时,只验证 CreateGroup,Default组的验证

默认的验证组是 Default, 在所有情况下都会验证 

0
赶紧换个名字
赶紧换个名字
模拟公司以前的框架自己写的。
0
李家二狗
李家二狗

引用来自“彩云小斯”的评论

你想验证哪个字段,就在那个字段上加个类似@Size(min =1,max=100) 这样的注解就行


你好,我这样尝试了一下,好像还是不行,或者我在哪里能拿到错误信息?

@RequestMapping(value="parameter.do")
@ResponseBody
public Object signIn(@Size(min=10, max=100, message="error") int age) {
        
    return null;
}



0
彩云小斯
彩云小斯

引用来自“彩云小斯”的评论

你想验证哪个字段,就在那个字段上加个类似@Size(min =1,max=100) 这样的注解就行


引用来自“李家二狗”的评论

你好,我这样尝试了一下,好像还是不行,或者我在哪里能拿到错误信息?

@RequestMapping(value="parameter.do")
@ResponseBody
public Object signIn(@Size(min=10, max=100, message="error") int age) {
        
    return null;
}



我的意思是在你的User类中写这个注解。比如我这个方法,需要验证Account类。

public String accountShow(@Valid Account account, BindingResult bindingResult, Model model) {
		UserCheck check = (UserCheck) dataService;
		if (bindingResult.hasErrors()) {
			return "signin";
		}
...
}



Account类中如下设置

public class Account extends NoteEntityImpl {

	@Pattern(regexp = "^[a-zA-Z0-9]+$", message = "用户名仅能包含字母与数字,不能有空格且不能为空。")
	@Column(name = "user_id")
	private String userId;
	    //userName字段没有标示校验的注解,因此不会被校验
        @Column(name = "user_name")
	private String userName;
	
        @Size(min = 6, message = "密码长度不能少于6位")
	@Column(name = "password")	
	private String passWord;
	

 


Account类中,仅userId,和passWord 有校验,userName没有校验注解,因此系统仅会对前两个字段进行校验

0
一书生
一书生
LZ 可以尝试用分组校验,详情参见这片博文:http://jinnianshilongnian.iteye.com/blog/1990081
返回顶部
顶部