Estoy buscando la forma más fácil y simple de enlazar y convertir datos en Spring MVC. Si es posible, sin hacer ninguna configuración xml.Conversión de tipo Spring MVC: ¿PropertyEditor o convertidor?
Hasta ahora he estado usando PropertyEditors así:
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();
}
}
y
...
public class MyController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Category.class, new CategoryEditor());
}
...
}
Es simple: tanto la conversión se definen en la misma clase, y la unión es directa. Si quisiera hacer un enlace general en todos mis controladores, podría agregar 3 lines in my xml config.
pero la primavera 3.x introdujo una nueva manera de hacerlo, usando Converters:
dentro de un contenedor de primavera, este sistema puede ser utilizado como una alternativa a PropertyEditors
Digamos que quiero usar Convertidores porque es "la última alternativa". Tendría que crear dos convertidores:
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();
}
}
primer inconveniente: tengo que hacer dos clases. Ventaja: no es necesario transmitir gracias a la genérica.
Entonces, ¿cómo puedo simplemente vincular los datos a los convertidores?
Segundo inconveniente: No he encontrado ninguna manera simple (anotaciones u otras facilidades programáticas) para hacerlo en un controlador: nada como .
Las únicas maneras que he encontrado sería tedioso, no es simple, y sólo alrededor de la unión cruzada controlador en general:
-
<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 config (sólo en primavera 3.1+):
@EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override protected void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringToCategory()); registry.addConverter(new CategoryToString()); } }
Con todos estos inconvenientes, ¿por qué usar convertidores? Me estoy perdiendo de algo ? ¿Hay otros trucos que no conozco?
Estoy tentado de seguir usando PropertyEditors ... La vinculación es mucho más fácil y rápida.
Nota (me tropecé también, usando Spring 3.2.17): cuando se usa hay una necesidad de referirse a esta conversión BeanService: –
mauhiz