Spring Validation 学习笔记

Spring Validation 学习笔记

  • 注解校验
  • 控制器
  • 踩坑
    • Spring 2.3.0 起 `web starters` 不包含 `Validation Starter` 了
  • 参考资料

SpringBoot 已经整合了 Hibernate Validation。Spring 2.3.0 起需要自己添加依赖。
验证本身比较好理解。主要是与全局异常配合这块,要根据自己项目实际情况来考虑。

注解校验

package jerry.demo.entity;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

public class Player {
	@NotBlank(message = "岂能无名?")
    @Size(max = 12, message = "名字最长12个字")
	private String name;
	
	@Min(value = 18,message = "未成年人,禁止入内")
	@Max(value = 200,message = "我一眼就看出你不是人!")
	private Integer age;

	// getter,setter 略
}

控制器

要校验的对象前添加注解:@Valid
校验结果自动保存在:BindingResult result

@RestController
public class WelcomeController {

	@RequestMapping("/")
	public Map welcome(@Valid Player player, BindingResult result) {
		Map map = new HashMap();
		 
		String msg = "你好: " + player.getName();
		int code = 200;
		
		if(result.hasErrors()){
			ArrayList<String> errorMsg = new ArrayList<String>();
            for (ObjectError error : result.getAllErrors()) {
                errorMsg.add(error.getDefaultMessage());
            }            
            
            code = 400;
            msg = errorMsg.toString();
        }
		
		map.put("code", code);
		map.put("msg", msg);
        return map;
	}
}

踩坑

Spring 2.3.0 起 web starters 不包含 Validation Starter

详情见:官方文档:Validation Starter no longer included in web starters
自己添加Validation Starter

<dependency>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-validationartifactId>
dependency>

参考资料

官网:Validating Form Input

springboot使用hibernate validator校验
Spring Boot:Spring Validation数据校验
springboot全局异常捕获统一处理及整合Validation
Spring Boot 全局异常处理 与 Hibernate Validator校验框架整合

Hibernate Validator JSR 303 的参考实现

你可能感兴趣的:(#,SpringBoot)