• Spring中@Valid和@Validated有哪些不同呢?


    转自:

    Spring中@Valid和@Validated有哪些不同呢?

    下文笔者讲述Spring中@Valid和@Validated的区别,如下所示:
    @Valid和@Validated的区别

    @Valid@Validated
    标准标准JSR-303规范增强JSR-303规范
    javax.validationorg.springframework.validation
    验证结果BindingResult resultBindingResult 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 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;  
        }  
    }
    
    
  • 相关阅读:
    渗透攻防Web篇-深入浅出SQL注入
    Python报错:AttributeError: <unknown>.DeliveryStore 获取Outlook邮箱时报错
    前端 | (十四)canvas基本用法 | 尚硅谷前端HTML5教程(html5入门经典)
    实现艾尔登法环中的大卢恩效果
    vscode开发maven的javaweb项目,并部署到tomcat及配置
    PyTorch C++扩展用于AMD GPU
    python连接orcal数据库以及解决1047报错方法(已解决)
    一篇图文搞定Java内存模型
    运用平台系统流量多久会提升?有什么办法技巧?
    CSP-J/S第一轮测试知识点全覆盖
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127662671