类级别bean验证中的当前组

时间:2016-02-05 03:30:10

标签: java bean-validation spring-validator

我在bean中有一些组验证:

@FichaValida(groups={Ficha.DatosGenerales.class, Ficha.Economia.class})
public class Ficha {
    public interface DatosGenerales{}
    public interface Documentos{}
    public interface Ubigeo{}
    public interface Economia{}
    @NotEmpty(groups = {DatosGenerales.class})
    String apPrimer;

    @NotEmpty(groups = {DatosGenerales.class})
    String apSegundo;

    @NotEmpty(groups = {DatosGenerales.class})
    String preNombres;

    @NotEmpty(groups = {Documentos.class})
    String tiDocumento;

    @NotEmpty(groups = {Documentos.class})
    String nuDocumento;


    @NotEmpty(groups = {Ubigeo.class})
    String deDepartamento;

    @NotEmpty(groups = {Ubigeo.class})
    String deProvincia;

    @NotEmpty(groups = {Ubigeo.class})
    String deDistrito;


    @NotEmpty(groups = {Economia.class})
    String nuIngreso;

    @NotEmpty(groups = {Economia.class})
    String nuGasto;
    //members, setters and getters
}

这些方法:

@RequestMapping(value = "datos-generales.do", method = RequestMethod.POST)
public String datosGenerales(
        @Validated({Ficha.DatosGenerales.class}) Ficha ficha,
        BindingResult bindingResult){
}

@RequestMapping(value = "documentos.do", method = RequestMethod.POST)
public String documentos(
        @Validated({Ficha.Documentos.class}) Ficha ficha,
        BindingResult bindingResult){
}

@RequestMapping(value = "economia.do", method = RequestMethod.POST)
public String economia(
        @Validated({Ficha.Economia.class}) Ficha ficha,
        BindingResult bindingResult){

}

我如何在验证器类中知道哪个组当前正在验证?

public class FichaValidator implements ConstraintValidator<FichaValida, Ficha> {

    private FichaValida fichaValida;

    public void initialize(FichaValida fichaValida) {
        this.fichaValida = fichaValida;
    }

    public boolean isValid(Ficha ficha, ConstraintValidatorContext constraintValidatorContext) {
        /*
        if(Ficha.DatosGenerales.class==...){
            //some validations
        }else if(Ficha.Economia.class==...){
            //some validations
        }
        */
        return true;
    }

}

我需要根据当前的组验证对成员进行验证,例如,如果DatosGenerales组正在验证,则仅使用与其相关的成员。

1 个答案:

答案 0 :(得分:0)

    public boolean isValid(Ficha ficha, ConstraintValidatorContext constraintValidatorContext) {
        if(Ficha.DatosGenerales.class==this.fichaValida.value()){
            //some validations
        }else if(Ficha.Economia.class==this.fichaValida.value()){
            //some validations
        }
        return true;
    }