में रूपांतरण सेवा सेवा मैं स्प्रिंग एप्लिकेशन में इस योजना का पालन कर रहा हूं।वसंत
- अनुरोध वस्तु की आईडी और कुछ अन्य पैरामीटर वाला सर्वर को भेजा जाता इस वस्तु
- इस आईडी के साथ वस्तु में भर जाएगी करने के लिए डेटाबेस से भरी हुई है
- getters और setters में लागू कर रहे हैं इस वस्तु मान
- वस्तु तो संग्रहीत किया जाता है
मैं this other question में पूछा से पहले वस्तु तैयार करने के लिए अनुरोध के पैरामीटर पॉप्युलेट सबसे अच्छा तरीका था क्या पॉप्युलेट करने के लिए। जवाब यह था कि @ModelAtribute एनोटेटेड विधि में या initBinder में एक संपादक के साथ conversion service का उपयोग करने का सबसे अच्छा तरीका था।
तो मैंने कनवर्टर का उपयोग करने की कोशिश की है, लेकिन मुझे एक समान उदाहरण नहीं मिला है और मैं थोड़ा फंस गया हूं। मैंने नीचे दिए गए कोड की तरह एक कोड लिखा है: इनिट बाइंडर में मैं रूपांतरण सेवा पंजीकृत करता हूं। तो उपयोगकर्ता ऑब्जेक्ट कन्वर्ट() विधि पर मान को पॉप्युलेट करने से पहले ऑब्जेक्ट को डेटाबेस से लोड करने के लिए बुलाया जाता है। समस्या यह है कि यह कॉन्फ़िगरेशन काम नहीं करता है क्योंकि यह किसी ऑब्जेक्ट उपयोगकर्ता के ऑब्जेक्ट उपयोगकर्ता के आईडी (उपयोगकर्ता नाम फ़ील्ड) को परिवर्तित कर रहा है, लेकिन फिर यह ऑब्जेक्ट के साथ setUsername() बनाने की कोशिश करता है, इसलिए मुझे "java.lang" मिलता है IleglegArgumentException: तर्क प्रकार मेल नहीं खाता "।
क्या कोई मुझे इच्छित व्यवहार प्राप्त करने के लिए रूपांतरण सेवा का उपयोग करने के तरीके का एक सुराग या उदाहरण दे सकता है?
धन्यवाद।
@Autowired
private ConversionService conversionService;
@InitBinder("user")
public void initBinder(@RequestParam("username")String username, WebDataBinder binder){
binder.setConversionService(conversionService);
}
@RequestMapping(value="/user/save", method=RequestMethod.POST)
public String save(@ModelAttribute("user") User user, Model model) {
...
}
की तरह कुछ के साथ:
@Component
public class UserConversionService implements ConversionService{
...
@Override
public Object convert(Object name, TypeDescriptor arg1, TypeDescriptor arg2) {
return userService.find((String)name);
}
}
यह भी देखें: http://stackoverflow.com/a/10240927/59087 –