0

Springを使用して単純なアプリケーションを構築し、カスタムのJSR303アノテーションを実装してメソッド文字列パラメータを検証しようとします。私はSpringコンテナを設定するためにJavaコードを使用し、私は必要なすべての豆をロードしたと思います。しかし、検証アノテーションはまだ機能しません。ここでカスタムJSR303アノテーションを使用してSpring MVCコンテナのメソッドパラメータを検証する際の問題

はコードです:

設定春:

@Configuration 

@Lazy(false) 

public class MVCContainerConfig 
{ 
    @Bean 
    public AnnotationMethodHandlerAdapter annotationMethodHandlerAdapter() 
    { 
     ConfigurableWebBindingInitializer configurableWebBindingInitializer = new ConfigurableWebBindingInitializer(); 
     configurableWebBindingInitializer.setValidator(localValidatorFactoryBean()); 

     AnnotationMethodHandlerAdapter annotationMethodHandlerAdapter = new AnnotationMethodHandlerAdapter(); 
     annotationMethodHandlerAdapter.setWebBindingInitializer(configurableWebBindingInitializer); 
     annotationMethodHandlerAdapter.setMessageConverters(new HttpMessageConverter[]{ 
      new BufferedImageHttpMessageConverter(), 
      new ByteArrayHttpMessageConverter(), 
      new FormHttpMessageConverter(), 
      new ResourceHttpMessageConverter(), 
      new StringHttpMessageConverter(), 
      new AtomFeedHttpMessageConverter(), 
      new RssChannelHttpMessageConverter(), 
      new MappingJacksonHttpMessageConverter(), 
      new Jaxb2RootElementHttpMessageConverter(), 
      new MarshallingHttpMessageConverter(), 
      new XmlAwareFormHttpMessageConverter() 
     }); 

     return annotationMethodHandlerAdapter; 
    } 

    @Bean 
    public DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping() 
    { 
     DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping = new DefaultAnnotationHandlerMapping(); 
     defaultAnnotationHandlerMapping.setInterceptors(new Object[]{localeChangeInterceptor(), 
                    themeChangeInterceptor()}); 
     return defaultAnnotationHandlerMapping; 
    } 

    @Bean(name="validator") 
    public LocalValidatorFactoryBean localValidatorFactoryBean() 
    { 
     LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); 

     return localValidatorFactoryBean; 
    } 
... (ignore useless code) 
} 

注釈の定義:

@Documented 
@Constraint(validatedBy={NotEmptyOrWhitespaceValidatorImp.class}) 
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
@Retention(RUNTIME) 
@ReportAsSingleViolation 
@NotNull 
public @interface NotEmptyOrWhitespace 
{ 
    //TODO change this when language package is ready 
    public abstract String message() default "Empty or white space error message"; 

    public abstract Class<?>[] groups() default { }; 

    public abstract Class<? extends Payload>[] payload() default { }; 

    /** 
    * Defines several {@code @NotEmptyOrWhitespace} annotations on the same element. 
    */ 
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
    @Retention(RUNTIME) 
    @Documented 
    public @interface List { 
     NotEmptyOrWhitespace[] value(); 
    } 
} 

制約定義:

public class NotEmptyOrWhitespaceValidatorImp implements ConstraintValidator<NotEmptyOrWhitespace, String> 
{ 
    public void initialize(NotEmptyOrWhitespace annotation){} 

    public boolean isValid(String str, ConstraintValidatorContext constraintValidatorContext) 
    { 
     str = str.replaceAll(" ", ""); 
     return ((str == null || str.isEmpty()) ? false : true); 
    } 
} 

私がテストしたい方法:

public boolean isOurProduct(@NotEmptyOrWhitespace String productName) 
    { 
     productName = productName.trim().toLowerCase(); 
     return this.productSet.contains(productName); 
    } 

JUnitテスト方法:

@Test 
     public void testIsOurProduct() 
     { 
      // If the annotation works, then I should see an exception occurred instead of the output 
      System.out.println("********* "+this.finder.isOurProduct(" ")); 
     } 
+0

'MVCContainerConfig'クラスはコンパイルされません。コンパイルするサンプルコードを教えてください。 – skaffman

答えて

関連する問題