मैं स्प्रिंग एमवीसी में डेटा को बांधने और परिवर्तित करने का सबसे आसान और सरल तरीका ढूंढ रहा हूं। यदि संभव हो, तो कोई एक्सएमएल विन्यास किए बिना।वसंत एमवीसी प्रकार रूपांतरण: संपत्ति संपादक या कनवर्टर?
अब तक मैं बहुत तरह 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 lines in my xml config जोड़ सकता था।
लेकिन वसंत 3.x यह करने के लिए एक नया तरीका पेश किया, Converters का उपयोग कर:
एक स्प्रिंग कंटेनर के भीतर, इस प्रणाली 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();
}
}
पहले खामी: मैं दो वर्गों बनाने के लिए किया है। लाभ: सामान्यता के लिए धन्यवाद डालने की कोई ज़रूरत नहीं है।
फिर, मैं बस कनवर्टर्स को डेटा कैसे बांधूं?
दूसरा दोष यह है: ऐसा कुछ नहीं: मैं किसी भी सरल तरीका (एनोटेशन या अन्य कार्यक्रम संबंधी सुविधाएं) एक नियंत्रक में यह करने के लिए नहीं मिला है।
केवल तरीके मैं, थकाऊ आसान नहीं है, और केवल के बारे में सामान्य पार नियंत्रक बाध्यकारी होगा मिल गया है:
-
<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 (केवल स्प्रिंग में 3.1+):
@EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override protected void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringToCategory()); registry.addConverter(new CategoryToString()); } }
इन सभी दोषों के साथ, कन्वर्टर्स का उपयोग क्यों करें? क्या मैं कुछ भूल रहा हूँ ? क्या ऐसी कोई चाल है जिसके बारे में मुझे पता नहीं है?
मैं PropertyEditors का उपयोग करने के लिए प्रेरित हूं ... बाध्यकारी बहुत आसान और तेज है।
नोट (मैं वसंत 3.2.17 का उपयोग करके भी ठोकर खा रहा हूं): का उपयोग करते समय वास्तव में इस रूपांतरण को संदर्भित करने की आवश्यकता है सेवा बीन: –
mauhiz