[英]How to configure direct field access on @Valid in Spring?
如何在不使用getter / setter的情况下告诉spring-web
验证我的dto?
@PostMapping(path = "/test")
public void test(@Valid @RequestBody WebDTO dto) {
}
public class WebDTO {
@Valid //triggers nested validation
private List<Person> persons;
//getter+setter for person
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public static class Person {
@NotBlank
public String name;
public int age;
}
}
结果:
"java.lang.IllegalStateException","message":"JSR-303 validated property
'persons[0].name' does not have a corresponding accessor for Spring data
binding - check your DataBinder's configuration (bean property versus direct field access)"}
特殊要求:我仍然想在布尔getter上添加@AssertTrue
以提供跨域验证,例如:
@AssertTrue
@XmlTransient
@JsonIgnore
public boolean isNameValid() {
//...
}
您必须配置Spring DataBinder以使用直接字段访问。
@ControllerAdvice
public class ControllerAdviceConfiguration {
@InitBinder
private void initDirectFieldAccess(DataBinder dataBinder) {
dataBinder.initDirectFieldAccess();
}
}
尝试这样的事情:
@Access(AccessType.FIELD)
public String name;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.