Spring-验证字段的字段

时间:2018-11-09 07:54:49

标签: java spring validation spring-boot

我正在使用Spring Boot开发一个API,其中有一个对象,该对象具有另一个对象,该对象具有需要验证的字段。这些是以下内容:

CodigoDTO

public final class CodigoDTO {
    private String codigo;
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String accion;
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private UserDTO user;
}

UserDTO

public final class UserDTO {
    @ValidIdDocument(message = ERROR_DNI_NIE_FORMAT, checkNie = true, checkNif = true)
    private String username;
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;
    private String email;
    @Telefono
    private String tlf;
    private List<CategoriaVideosExplicativos> videosExplicativosVistos;
}

Validator界面

@Target({ ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { TelefonoValidator.class })
@Documented
public @interface Telefono {
    String message() default ERROR_EMAIL_OR_TLF;
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

我不包含验证器接口,因为它不相关。

因此,我要向服务中发送一个CodigoDTO对象,该对象具有一个UserDTO,并且其tlf字段必须具有特定的模式。但是验证器没有被触发。

请注意,我知道我可以将注释放在UserDTO的{​​{1}}字段中,但这并不意味着这是正确的方法。

我该如何实现?谢谢!

2 个答案:

答案 0 :(得分:3)

如果要验证嵌套对象,则必须使用@Valid注释来注释字段:

public final class CodigoDTO {
    private String codigo;
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String accion;
    @Valid
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private UserDTO user;
}

答案 1 :(得分:0)

转到使用该对象并使用@Valid注释该对象的服务。这应该可以完成工作。

public String myService( @RequestBody @Valid myObject) {
 //something  
}