Текущая группа в проверке bean-компонента на уровне класса

У меня есть несколько групповых проверок в 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 проверяет, используйте только членов, связанных с ней.


person userfb    schedule 05.02.2016    source источник
comment
Какую группу вы хотите? Группа, указанная в ограничении, которое проверяется (которое вы действительно можете получить через initialize), или группа, которая в настоящее время запрашивается/проверяется вызовом Validator.validate? В случае последнего это невозможно. Концепция валидаторов и групп ограничений ортогональна. Каков ваш вариант использования? Вы хотите написать ограничение на уровне класса. Ваш код кажется неполным.   -  person Hardy    schedule 16.02.2016


Ответы (1)


person    schedule
comment
this.fichaValida (член FichaValidator) инициализируется один раз, имеет одно и то же значение при каждой проверке, после чего ответ не работает. - person userfb; 06.02.2016