代码之家  ›  专栏  ›  技术社区  ›  membersound

如何在@Valid in Spring上配置直接字段访问?

  •  2
  • membersound  · 技术社区  · 5 年前

    spring-web 在不使用getter/setter的情况下验证我的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)"}
    

    特殊要求:我还想补充 @AssertTrue

        @AssertTrue
        @XmlTransient
        @JsonIgnore
        public boolean isNameValid() {
            //...
        }
    
    1 回复  |  直到 5 年前
        1
  •  3
  •   Elgayed    5 年前

    您必须配置Spring DataBinder以使用直接字段访问。

    @ControllerAdvice    
    public class ControllerAdviceConfiguration {
        @InitBinder
        private void initDirectFieldAccess(DataBinder dataBinder) {
            dataBinder.initDirectFieldAccess();
        }
    }
    
        2
  •  -1
  •   scatolone    5 年前

    试试这样的:

    @Access(AccessType.FIELD)
    public String name;