स्प्रिंग एमवीसी किसी दिए गए अनुरोध पैरामीटर के प्रकार को कैसे निर्धारित करता है?
वसंत ServletRequestDataBinder का उपयोग अपने मूल्यों को बांधने के लिए करता है। प्रक्रिया के रूप में
/**
* Bundled Mock request
*/
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("name", "Tom");
request.addParameter("age", "25");
/**
* Spring create a new command object before processing the request
*
* By calling <COMMAND_CLASS>.class.newInstance();
*/
Person person = new Person();
इस प्रकार वर्णित किया जा सकता ...
/**
* And Then with a ServletRequestDataBinder, it bind the submitted values
*
* It makes use of Java reflection To bind its values
*/
ServletRequestDataBinder binder = ServletRequestDataBinder(person);
binder.bind(request);
परदे के पीछे, DataBinder उदाहरणों आंतरिक रूप से एक BeanWrapperImpl उदाहरण है, जिसमें जिम्मेदार है के लिए आदेश वस्तु के मूल्यों की स्थापना का उपयोग करता है। getPropertyType विधि के साथ, यह संपत्ति प्रकार को पुन: प्राप्त
आप ऊपर (बेशक, एक नकली का उपयोग करके) प्रस्तुत अनुरोध देखते हैं, तो वसंत
BeanWrapperImpl beanWrapper = new BeanWrapperImpl(person);
Clazz requiredType = beanWrapper.getPropertyType("name");
और फिर
beanWrapper.convertIfNecessary("Tom", requiredType, methodParam)
कॉल करेंगे
स्प्रिंग एमवीसी कंटेनर एक दिनांक का प्रतिनिधित्व करने वाले अनुरोध पैरामीटर को कैसे बांधता है?
आप डेटा जो विशेष रूपांतरण की जरूरत के मानव के अनुकूल प्रतिनिधित्व है, तो आप रजिस्टर करना होगा एक PropertyEditor उदाहरण के लिए, java.util.Date क्या 13/09/2010 है पता नहीं है, तो आप स्प्रिंग
बता
स्प्रिंग, निम्नलिखित PropertyEditor
binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("dd/MM/yyyy").parse(value));
} catch(ParseException e) {
setValue(null);
}
}
public String getAsText() {
return new SimpleDateFormat("dd/MM/yyyy").format((Date) getValue());
}
});
का उपयोग करके यह मानव के अनुकूल तिथि परिवर्तित
जब convertIfNecessary विधि बुला, स्प्रिंग किसी भी registere के लिए लग रहा है डी PropertyEditor जो सबमिट मूल्य को बदलने का ख्याल रखता है। अपने PropertyEditor रजिस्टर करने के लिए है, तो आप भी कर सकते हैं
स्प्रिंग 3,0
@InitBinder
public void binder(WebDataBinder binder) {
// as shown above
}
पुरानी शैली स्प्रिंग 2.x
@Override
public void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
// as shown above
}
आपको बहुत बहुत धन्यवाद। –
वसंत 2.5.x में @InitBinder भी है: http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html#mvc-ann-initbinder – Rihards
धन्यवाद क्योंकि यह एक प्रतीत होता है व्यापक उत्तर लेकिन गैर-विशेषज्ञों के लिए यह वास्तव में एक साधारण व्यावहारिक उदाहरण शामिल करने में मदद करेगा। – Marquez