2012-01-10 11 views
6

Iam थोड़ा स्प्रिंगएमवीसी आरईएसटी अवधारणा के लिए नया है। निम्नलिखित समस्या को समझने/हल करने के लिए यहां विशेषज्ञों की सहायता की आवश्यकता है, मैंने एक स्प्रिंगएमवीसी अनुप्रयोग विकसित किया है, निम्नलिखित नियंत्रक वर्ग कोड का एक हिस्सा है, और यह जिस तरह से है, यह पूरी तरह से ठीक काम करता है, जिसका अर्थ है कि यह JSON प्रकार के साथ ठीक काम करता है वस्तु,एक आरईएसटी आवेदन के अनुरोधबॉडी

@RequestMapping(method = RequestMethod.POST, value = "/user/register") 
public ModelAndView addUser(@RequestBody String payload) { 

    try{ 

     ObjectMapper mapper = new ObjectMapper(); 
     CreateNewUserRequest request = mapper.readValue(payload, CreateNewUserRequest.class); 

     UserBusiness userBusiness = UserBusinessImpl.getInstance(); 
     CreateNewUserResponse response = userBusiness.createNewUser(request); 


     return new ModelAndView(ControllerConstant.JASON_VIEW_RESOLVER, "RESPONSE", response); 

और यह मेरा बाकी-servlet.xml मेरे समस्या

तरह
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 

<bean id="jsonViewResolver" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" /> 


<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonConverter" /> 
     </list> 
    </property> 
</bean> 

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
     <property name="supportedMediaTypes" value="application/json" /> 
</bean> 

<bean name="UserController" class="com.tap.mvp.controller.UserController"/> 

मैं कैसे यह सामान्य पोस्ट अनुरोध के लिए काम कर सकता हूँ है, मेरे नियंत्रक के बजाय JSON प्रकार वस्तु स्वीकार नहीं करना चाहिए लग रहा है यह सामान्य HTTP पोस्ट चर के लिए काम करना चाहिए। मैं अनुरोध से मूल्य कैसे प्राप्त करूं? इसके लिए मुझे क्या संशोधन करने की आवश्यकता है। मैं

ObjectMapper mapper = new ObjectMapper(); 
     CreateNewUserRequest request = mapper.readValue(payload, CreateNewUserRequest.class); 

से छुटकारा पाने के और बदले

CreateNewUserRequest

वर्ग का एक उदाहरण बनाने के लिए जिस तरह से जोड़ने के लिए, अपने निर्माता लागू द्वारा की जरूरत की जरूरत है। इसके लिए मुझे अनुरोध से मूल्य प्राप्त करने की आवश्यकता है। मैं उसको कैसे करू? क्या मैं मानचित्र के रूप में @RequestBody स्ट्रिंग पेलोड का इलाज कर सकता हूं और मूल्य प्राप्त कर सकता हूं? या HTTP पोस्ट विधि के अनुरोध से मूल्य प्राप्त करने का कोई विशिष्ट तरीका है? निम्न मान,

firstName, lastName, ईमेल, पासवर्ड

उत्तर

10

आप यहाँ दो अवधारणाओं मिश्रण कर रहे हैं अनुरोध में होगा।

@RequestMapping(
     headers = {"content-type=application/json"}, 
     method = RequestMethod.POST, value = "/user/register") 
@ResponseBody 
public CreateNewUserResponse addUser(@RequestBody CreateNewUserRequest request) { 
     UserBusiness userBusiness = UserBusinessImpl.getInstance(); 
     return userBusiness.createNewUser(request); 
} 

सूचना @ResponseBody एनोटेशन: स्प्रिंग MVC में आराम सेवा और अधिक सुरुचिपूर्ण रूप में वसंत संभालती JSON/XML आप के लिए प्राथमिकता निर्धारण है। आपको किसी भी दृश्य रिज़ॉल्यूशन और मैन्युअल JSON marshalling की आवश्यकता नहीं है। और आप एक्सएमएल (जेएक्सबी के माध्यम से) मुफ्त में प्राप्त करते हैं।

हालांकि फॉर्म POST के माध्यम से भेजा गया डेटा बहुत अलग है। मैं विभिन्न मीडिया प्रकार से निपटने के दूसरे मानचित्रण बनाने का सुझाव देते हैं: कॉल इस विन्यास बाकी के साथ

@RequestMapping(
     headers = {"content-type=application/x-www-form-urlencoded"}, 
     method = RequestMethod.POST, value = "/user/register") 
public ModelAndView addUser(@RequestParam("formParam1") String formParam1) { 
    //... 
} 

Content-type=application/json साथ दूसरा एक (कम से कम सिद्धांत रूप में करने के लिए पहली विधि और फार्म पोस्ट अनुरोध पर ले जाया जाएगा, यह प्रयास नहीं किया है)। ध्यान दें कि कच्चे @RequestParam एनोटेशन की तुलना में वसंत में फॉर्म डेटा को संभालने के सरल तरीके हैं, देखें: Pass a request parameter in Spring MVC 3

+0

धन्यवाद Tomaz, यह वास्तव में मदद की, लेकिन छोटी सी गलती यह '@RequestParam ("formParam1") formParam1: स्ट्रिंग' के रूप में '@RequestParam ("formParam1") स्ट्रिंग formParam1' – bluelabel

+0

@bluelabel : धन्यवाद, तय है। बहुत अधिक स्कैला :-)। बीटीडब्लू आप विकी में जैसे हर प्रश्न और जवाब यहां संपादित कर सकते हैं (कुछ प्रतिष्ठा स्तर से ऊपर)। गलतियों को सही करने के लिए स्वतंत्र महसूस करें! –

1

ओपी के सटीक प्रश्न का एक और जवाब consumes सामग्री प्रकार "text/plain" पर सेट करना है और फिर @RequestBody String इनपुट पैरामीटर घोषित करना है। यह POST डेटा के पाठ को निम्नलिखित उदाहरण में घोषित String परिवर्तनीय (postPayload) के रूप में पास करेगा।

बेशक, यह मानता है कि आपका पोस्ट पेलोड टेक्स्ट डेटा है (जैसा ओपी कहा गया था)।

उदाहरण:

@RequestMapping(value = "/user/register", method = RequestMethod.POST, consumes = "text/plain") 
    public ModelAndView addUser(@RequestBody String postPayload) {  
     // ...  
    } 
संबंधित मुद्दे