2016-08-10 6 views
0

В приложении Spring загрузки с использованием Web MVC для разработки API REST. Все работает нормально.Весенний пользовательский форматировщик во внешней банке

Для преобразования строки в 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 в общую банку для всех проектов, в этом случае Spring MVC не регистрирует пользовательский конвертер! Я не понимаю, почему. Ваша помощь будет оценена по достоинству.

+0

Я могу видеть код в github? –

+0

Нет, вы не можете. –

+0

ok men, удачи –

ответ

0

Я был в состоянии зарегистрировать Обычай форматтер таким образом:

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

Я не знаю, почему я должен сделать это для моих тестов, даже если форматировщик уже зарегистрирован в конфигурации.

Смежные вопросы