2014-10-08 1 views
0

Я работаю с Spring Framework 4.0.7Как применить Spring Formatter <T> в автономном или тестирования приложения

О Formatters

Для приложения Spring MVC У меня есть следующие:

@Autowired 
private Set<Formatter<?>> formatters; 

@Override 
public void addFormatters(FormatterRegistry registry) { 

    for(Formatter<?> formatter : formatters){ 
     registry.addFormatter(formatter); 
    } 

} 

И отлично работает.

для Spring Web Flow, я должен добавить следующие

@Bean 
public DefaultFormattingConversionService conversionService(){ 
    DefaultFormattingConversionService dfcs = new DefaultFormattingConversionService(); 
    for(Formatter<?> formatter : formatters){ 
     dfcs.addFormatter(formatter); 
    } 
    return dfcs; 
} 

И работает отлично

Пока здесь, я не могу видеть в любых веб-форм (MVC & потоков), что, когда некоторые данные представляют или загружены formatters выполняют свою работу.

У меня есть впечатление, что DefaultFormattingConversionService может использоваться как автономно, так и для целей тестирования (JUnit) для отображения некоторого объекта в формате (десятичные форматы, например: Double & BigDecimal).

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

Предназначен для прямого использования, но и подвергает статические addDefaultFormatters (org.springframework.format.FormatterRegistry) Служебный метод для специального применения против любого экземпляра FormatterRegistry, так же, как DefaultConversionService подвергает свой собственный метод addDefaultConverters.

В соответствии с вышеизложенным нет никаких ограничений, которые могут быть применены или использованы только в веб-среде.

Для нового автономного приложения с conversionService() объявленной

я следующее:

@Component 
public class PersonService { 

    private static final Logger logger = LoggerFactory.getLogger(PersonService.class); 

    public void printPerson(Person person){ 
     logger.info("{}", person.toString()); 
    } 

} 

В Main

AnnotationConfigApplicationContext context = ... 

Person person = PersonFactory.createPerson(); 

PersonService personService = context.getBean(PersonService.class); 
personService.printPerson(person); 

При запуске приложения, я могу увидеть и подтвердить что все форматирующие элементы загружены в ApplicationContext, но когда объект печатается, ни один форматир в соответствии с типом (Double, BigDecimal) выполняются.

Какая дополнительная конфигурация требуется? Очевидно, что-то требуется

Я не уверен, если это возможно, мне нужно, что когда метод .toString() называется, весна в некотором роде может быть в состоянии применить formatters для двойного BigDecimal и дата свойств объекта. Это для автономного приложения и для тестирования.

+0

«Formatter» будет использоваться только при использовании Spring для вывода поля или объекта. Вы просто делаете 'toString()', который не делает и ничего не знает о форматировщиках. –

+0

Я понимаю, для целей консоли Spring, что предлагает сделать вывод? Спасибо –

ответ

0

У меня такая же проблема. Я понимаю, что неудобно тестировать форматировщик и конвертер без MVC, но это оказалось более простым, чем я думаю.

Я надеюсь, что мой способ также сработает для вас.

Например:

У меня есть простой преобразователь. Это может конвертировать из имени пользователя в объект User.

Строка Username -> User Object и наоборот

Раствор для проверить:

@Autowired 
ConversionService conversionService; 

@Test 
public void testConversionService(){ 
    assertThat(conversionService,not(equalTo(null))); 
    User user = conversionService.convert("Huy", User.class); 
    assertThat(user,not(equalTo(null))); 
    assertThat(user.getUserName(),equalTo("Huy")); 
} 

Надежда, что помогает!

+0

Позвольте мне проверить вашу работу как можно скорее, но я использую «Formatter », а вместо вас «ConversionService» –

+0

Да, это точно так же, как тест. – huy