• 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;  
        }  
    }
    
    
  • 相关阅读:
    恒运资本:人民币汇率何时走出低谷?
    pyflink读取kafka数据写入mysql实例
    LeetCode 84.柱状图中最大的矩形
    JSON Web Tokens (JWT) 在线解密工具
    SpringACK对RabbitMQ消息的确认(消费)
    【muduo源码剖析】Channel设计分析
    【目标检测】30、
    python学习之【包和内置模块】
    线程的理解、进程和线程、线程的创建、线程安全和线程池(JAVA基础十三)
    5、Java——循环案例代码详解(2)
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127662671