-1

Спецификации: зимует-валидатор [5.2.4.Final], весна-контекст [4.2.2.RELEASE]Задания которой валидация группы использовать для боба

Я пытаюсь сделать решение, описанным here работы как ниже. Но нет никаких нарушений ограничений, встречающихся & вещи, которые просто проходят через штраф. Зачем?

У меня есть две бобы, один родитель, другой ребенок. Определение ребенка, как показано ниже

package code; 
import javax.validation.constraints.NotNull; 

import org.hibernate.validator.constraints.NotBlank; 
import org.hibernate.validator.constraints.NotEmpty; 
import org.springframework.stereotype.Service; 
import org.springframework.validation.annotation.Validated; 

@Service("SampleBean") 
@Validated 
public class SampleBean { 

    @NotNull(message= "value can not be null" , groups = Group1.class) 
// @NotNull(message= "value can not be null") 
    private Integer value; 

    @NotNull(message= "value1 can not be null" , groups = Group2.class) 
// @NotNull(message= "value can not be null") 
    private Integer value1; 

    public Integer getValue() { 
     return value; 
    } 

    public void setValue(@NotNull 
      Integer value) { 
     this.value = value; 
    } 

    public Integer getValue1() { 
     return value1; 
    } 

    public void setValue1(Integer value1) { 
     this.value1 = value1; 
    } 

} 

определение Родитель боб, как показано ниже:

package code; 
import javax.validation.Valid; 
import javax.validation.constraints.NotNull; 

import org.springframework.stereotype.Service; 
import org.springframework.validation.annotation.Validated; 

@Service("SampleBeanParent") 
@Validated 
public class SampleBeanParent { 


    public void acceptChildBean(@NotNull(message = "child cannot be null") 
// @Valid 
    @Validated(Group1.class) 
    SampleBean childBean) throws NoSuchMethodException, SecurityException{ 
     System.out.println("successfully finished"); 
    } 


} 

Класс тест как

package code; 
import java.util.ArrayList; 
import java.util.List; 

import javax.validation.ConstraintViolation; 
import javax.validation.ConstraintViolationException; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 

public class Test { 


    public static void main(String[] args) throws NoSuchMethodException, SecurityException{ 


     ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class); 
     SampleBean sampleBean = (SampleBean) context.getBean("SampleBean"); 

     try{ 
      SampleBeanParent parent = (SampleBeanParent) context.getBean("SampleBeanParent"); 
      parent.acceptChildBean(sampleBean); 

     } 
     catch(ConstraintViolationException e){ 
      System.out.println("there were validation errors"); 
     } 
    } 



} 

Кстати, у меня есть установки соответствующего уровня пружины beans как ниже & он отлично работает без групп (я прокомментировал строки проверки в приведенном выше коде без групп для рабочего случая). Так что это не проблема :)

package code; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; 
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; 

@Configuration 
@ComponentScan(basePackageClasses = {SampleBean.class}) 
public class SpringConfiguration { 

    @Bean(name = "validator") 
    public LocalValidatorFactoryBean initValidatorFactory(){ 
     return new LocalValidatorFactoryBean(); 
    } 

    @Bean 
    public MethodValidationPostProcessor initValidationPostProcessor(){ 
     return new MethodValidationPostProcessor(); 
    } 
} 
+0

и что вы подразумеваете под« работает отлично без групп »? Я попытался воспроизвести ваш сценарий и удалил связанный с группой код из SampleBean и SampleBeanParent, но это привело к тому, что «успешно завершено» тоже – hammerfest

+0

. Я добавил комментарии к комментариям, чтобы показать нормальный случай всех ограничений, относящихся к умолчанию, где он работает нормально. Просто раскомментируйте их и прокомментируйте связанные с группой строки. – nikel

ответ

0

Я мог бы сделать это следующим образом. Измененные классы следующим образом (я удалил все из кода, который, казалось бы излишним/ненужным от конкретной точки проблемного зрения)

@Service("SampleBeanParent") 
@Validated(Group1.class) 
public class SampleBeanParent { 

    public void acceptChildBean(
      @Valid SampleBean childBean) throws NoSuchMethodException, SecurityException { 
     System.out.println("successfully finished"); 
    } 

} 

@Service("SampleBean") 
public class SampleBean { 

    @NotNull(message = "value can not be null", groups = Group1.class) 
    private Integer value; 

    public Integer getValue() { 
     return value; 
    } 

    public void setValue(Integer value) { 
     this.value = value; 
    } 

} 

Пожалуйста, обратитесь к этой теме: Spring @Validated in service layer, он содержит несколько полезных точек, среди прочего, из одного из ответов:

«Обозначенная аннотация используется только для указания группы проверки, она сама не приводит к какой-либо проверке. Вам нужно использовать одну из аннотаций javax.validation, например @ Null или @Valid. " - указывает на то, что @Validated(Group1.class) SampleBean childBean в вашем примере не представляется правильным

Последний ответ обсуждает конкретный случай, когда есть еще одна аннотация для параметра метода, кроме @Valid, как и в вашем случае, также было @NotNull (message = ребенок не может быть нулевым »)

+0

Ссылка на другой ответ мне очень помогла :). Я надеялся, что будет способ указать, какие группы проверки использовать для определенного параметра метода. Похоже, это можно сделать только на уровне класса и метода, а не на уровне параметра метода. – nikel