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;  
        }  
    }
    
  • 相关阅读:
    Elasticsearch 架构解析与最佳实践
    Redis一键安装脚本
    Android——GridView(网格视图)相关知识总结贴
    Android——TabHost(标签容器)相关知识总结贴
    Android——RatingBar(评价条)相关知识总结贴
    Android——SeekBar(拖动条)相关知识总结贴
    Android——SQLite/数据库 相关知识总结贴
    Android——媒体库 相关知识总结贴
    Android——Broadcast Receive 相关知识总结贴
    Android——进程通信/ AIDL/Message相关知识总结贴
  • 原文地址:https://www.cnblogs.com/danhuang/p/12681426.html
Copyright © 2011-2022 走看看