2016-08-10 59 views
0

在使用Web MVC開發REST API的Spring引導應用程序中。一切正常。在外部jar中彈出自定義格式化程序

至字符串轉換爲ZonedDateTime,我創造了這個註釋:

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface DateTimeFormatter { 
} 

這裏是自定義格式:

public class ZonedDateTimeFormatter implements Formatter<ZonedDateTime> { 

    @Override 
    public String print(ZonedDateTime zoneddateTime, Locale locale) { 
     return ..... 
    } 

    @Override 
    public ZonedDateTime parse(String text, Locale locale) throws ParseException { 
     return ...... 
    } 
} 

這就是我如何添加格式化,

@SpringBootApplication 
@EnableDiscoveryClient 
@EnableHystrix 
@Configuration 
public class IndexApplication extends SpringBootServletInitializer { 

    ... 

    @Configuration 
    public static class ApplicationFormatterRegistrar extends WebMvcConfigurerAdapter implements FeignFormatterRegistrar { 

     @Override 
     public void addFormatters(FormatterRegistry registry) { 
      registry.addFormatterForFieldAnnotation(new ZonedDateTimeAnnotationFormatterFactory()); 
     } 

     @Override 
     public void registerFormatters(FormatterRegistry registry) { 
      registry.addFormatter(new ZonedDateTimeFormatter()); 
     } 
    } 
} 

這是我如何測試應用程序(Spring mockmvc):

this.mockMvc = MockMvcBuilders.standaloneSetup(indexResource).build(); 

...... 


@Test 
    public void should_accept_valid_request() throws Exception { 
     when(service.getSomething(id, begin, end)).thenReturn(somevalue); 
     mockMvc.perform(
       get("/index/{id}", 1) 
        .param("start", "2011-12-03T10:15:30") 
        .param("end", "2011-12-03T10:15:30") 
      ).andExpect(status().isOk()); 
    } 

所有工作正常。問題是我想將自定義註釋@DateTimeFormatter放在所有項目的通用jar中,在這種情況下,Spring MVC不會註冊自定義轉換器!我不明白爲什麼。 您的幫助,將不勝感激。

+0

我可以看到github中的代碼? –

+0

不,你不能。 –

+0

好男人,祝你好運 –

回答

0

我可以這樣註冊自定義格式:

FormattingConversionService conversionService = new FormattingConversionService(); 
conversionService.addFormatterForFieldAnnotation(new ZonedDateTimeAnnotationFormatterFactory()); 
this.mockMvc = MockMvcBuilders.standaloneSetup(indexResource).setConversionService(conversionService).build(); 

我不知道爲什麼我應該這樣做,即使格式化在配置已註冊我的測試。

相關問題