zoukankan      html  css  js  c++  java
  • Spring @Valid 和 @Validated 的区别和使用

    两者区别

    @Valid @Validated
    标准 标准JSR-303规范 增强JSR-303规范
    javax.validation org.springframework.validation
    验证结果 BindingResult result BindingResult result
    分组支持 不支持 支持
    分组序列 不支持 支持
    类型注解 支持
    方法注解 支持 支持
    方法参数注解 支持 支持
    构造函数注解 支持
    成员属性注解 支持 不支持
    嵌套验证 支持 不支持

    分组示例

    public interface First{}
    
    public interface Second{}
    
    public class User {
    	// 所有都验证
    	@NotNull(message = "...")
    	private int id;
    
     	// First 才验证
    	@NotNull(message = "...", groups = { First.class })
    	private String username;
     
     	// First 或 Second 才验证
    	@NotNull(message = "...", groups = { First.class, Second.class })
    	private String content;
    	
    	// First 验证 NotEmpty,Second 验证 Size
    	@NotEmpty(message = "...", groups = { First.class })
    	@Size(message = "...", min = 3, max = 8, groups = { Second.class })
    	private String height;
    }
    
    // 只验证 Second 分组和没有分组的属性
    public String save(@Validated( { Second.class }) User user, BindingResult result) {
    	if (result.hasErrors()) {
    		return "validate/error";
    	}
    	return "redirect:/success";
    }
    

    分组序列

    public interface GroupA {}
     
    public interface GroupB {}
     
    @GroupSequence( { GroupA.class, GroupB.class })
    public interface Group {}
    
    public @ResponseBody String save(@Validated({ Group.class }) User user, BindingResult result) {
    	if(result.hasErrors()) {
    		return false;
    	}
    	return true;
    }
    

    嵌套验证

    public class Item {
        @NotNull(message = "id不能为空")
        @Min(value = 1, message = "id必须为正整数")
        private Long id;
    
    	@Valid
        @NotNull(message = "props不能为空")
        @Size(min = 1, message = "至少要有一个属性")
        private List<Prop> props;
    }
    
    public class Prop {
        @NotNull(message = "pid不能为空")
        @Min(value = 1, message = "pid必须为正整数")
        private Long pid;
    
        @NotNull(message = "vid不能为空")
        @Min(value = 1, message = "vid必须为正整数")
        private Long vid;
    
        @NotBlank(message = "pidName不能为空")
        private String pidName;
    
        @NotBlank(message = "vidName不能为空")
        private String vidName;
    }
    
    @RestController
    public class ItemController {
        @RequestMapping("/item/add")
        public void addItem(@Validated Item item, BindingResult bindingResult) {
            doSomething();
        }
    }
    

    验证多个对象

    @Controller  
    public class PeopleController {  
        @RequestMapping("/add")  
        public @ResponseBody String add(@Validated People pp, BindingResult result1, @Validated Person ps, BindingResult result2)  
        {  
            if(result1.hasErrors())  
            {  
                return false;  
            }  
            if(result2.hasErrors())  
            {  
                return false;  
            }  
            return true;  
        }  
    }
    
  • 相关阅读:
    TreeSet——实现Comparable接口并重写CompareTo()方法
    HashMap的四种遍历方式
    HashMap—— values() remove方法 containsKey()方法 containsValue()方法
    HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)
    CSS——font使用方法
    css——选择器
    Eclipse怎么改变工程保存路径
    jsp其实是一个java类
    HTML——b i del a p img h1 h2 h3 h4 h5 h6 hr ol ul 标签的使用方法详解
    ACM算法练习-——ZJU1164-Software CRC
  • 原文地址:https://www.cnblogs.com/danhuang/p/12681426.html
Copyright © 2011-2022 走看看