Spring MVC'de verileri bağlamanın ve dönüştürmenin en kolay ve en basit yolunu arıyorum. Mümkünse, herhangi bir xml yapılandırması yapmadan.
Şimdiye kadar PropertyEditors'ı şu şekilde kullanıyorum :
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();
}
}
ve
...
public class MyController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Category.class, new CategoryEditor());
}
...
}
Çok basit: her iki dönüşüm de aynı sınıfta tanımlanır ve bağlama basittir. Tüm denetleyicilerim arasında genel bir bağlama yapmak isteseydim, xml yapılandırmamda yine de 3 satır ekleyebilirdim .
Ancak Spring 3.x, Dönüştürücüleri kullanarak bunu yapmanın yeni bir yolunu sundu :
Spring konteynır içinde bu sistem PropertyEditor'lara alternatif olarak kullanılabilir
Diyelim ki Dönüştürücüler'i kullanmak istiyorum çünkü bu "en son alternatif". İki dönüştürücü oluşturmam gerekirdi :
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();
}
}
İlk dezavantaj: İki sınıf yapmam gerekiyor. Faydası: Jeneriklik sayesinde döküm yapmaya gerek yok.
O halde, verileri dönüştürücülere nasıl basitçe bağlayabilirim?
İkinci dezavantaj: Bunu bir denetleyicide yapmanın basit bir yolunu (ek açıklamalar veya diğer programatik olanaklar) bulamadım: benzeri bir şey yok someSpringObject.registerCustomConverter(...);
.
Bulduğum tek yol sıkıcı olurdu, basit değil ve yalnızca genel çapraz denetleyici bağlamayla ilgili:
-
<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 yapılandırması ( yalnızca Spring 3.1+ ):
@EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override protected void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringToCategory()); registry.addConverter(new CategoryToString()); } }
Tüm bu dezavantajlara rağmen neden Dönüştürücüler kullanılıyor? Bir şey mi kaçırıyorum? Farkında olmadığım başka numaralar var mı?
PropertyEditors'ı kullanmaya devam etmek istiyorum ... Bağlama çok daha kolay ve daha hızlı.