Я ищу самый простой и простой способ привязки и преобразования данных в Spring MVC. Если возможно, без какой-либо конфигурации xml.
До сих пор я использовал PropertyEditors следующим образом:
public class CategoryEditor extends PropertyEditorSupport {
    // Converts a String to a Category (when submitting form)
    @Override
    public void setAsText(String text) {
        Category c = new Category(text);
        this.setValue(c);
    }
    // Converts a Category to a String (when displaying form)
    @Override
    public String getAsText() {
        Category c = (Category) this.getValue();
        return c.getName();
    }
}
и
...
public class MyController {
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Category.class, new CategoryEditor());
    }
    ...
}
Это просто: оба преобразования определены в одном классе, а привязка проста. Если бы я хотел выполнить общую привязку ко всем моим контроллерам, я мог бы добавить 3 строки в моей конфигурации xml.
Но Spring 3.x ввел новый способ сделать это, используя Преобразователи:
В контейнере Spring эта система может использоваться как альтернатива для PropertyEditors
Итак, скажем, я хочу использовать Конвертеры, потому что это "последняя альтернатива". Мне пришлось бы создавать два преобразователя:
public class StringToCategory implements Converter<String, Category> {
    @Override
    public Category convert(String source) {
        Category c = new Category(source);
        return c;
    }
}
public class CategoryToString implements Converter<Category, String> {
    @Override
    public String convert(Category source) {
        return source.getName();
    }
}
Первый недостаток: Мне нужно сделать два класса. Преимущество: нет необходимости бросать благодарность за универсальность.
Затем, как я просто привязываю данные к конвертерам?
  Второй недостаток: Я не нашел простой способ (аннотации или другие программные средства) сделать это в контроллере: ничего как someSpringObject.registerCustomConverter(...);.
Единственные способы, которые я нашел, были бы утомительными, а не просто, и только об общей привязке перекрестного контроллера:
-  
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="somepackage.StringToCategory"/> <bean class="somepackage.CategoryToString"/> </set> </property> </bean>
-  Конфигурация Java (только в Spring 3.1 +): @EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override protected void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringToCategory()); registry.addConverter(new CategoryToString()); } }
Со всеми этими недостатками, зачем использовать преобразователи? Я что-то упускаю? Есть ли другие трюки, о которых я не знаю?
У меня возникает соблазн продолжить использование PropertyEditors... Связывание намного проще и быстрее.
