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;  
    }  
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM