2015-06-16 7 views
9

में जेएसओएन डेटा बाध्यकारी मुझे निम्नलिखित कोड का उपयोग कर अपने स्प्रिंग एमवीसी नियंत्रक में एंड्रॉइड एप्लिकेशन से जेसन डेटा प्राप्त हुआ है।वसंत एमवीसी

import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.bind.annotation.RequestHeader; 

@RequestMapping(method = RequestMethod.POST, produces = "application/json") 
public @ResponseBody String getMethod(@RequestHeader(value="json") String  
headerStr) { 
System.out.println("POST"); 
System.out.println(headerStr); 
return "hello"; 
} 

println (headerStr) का उत्पादन होता है के रूप में

{"action":"check_login","password":"test","username":"test"} 

लेकिन मैं वर्ग निम्नलिखित को यह json डेटा बाध्य करने के लिए चाहते हैं।

public class LoginRequest { 
private String action; 
private String username; 
private String password; 

public String getAction() { 
return action; 
} 

public void setAction(String action) { 
this.action = action; 
} 

public String getUsername() { 
return username; 
} 

public void setUsername(String username) { 
this.username = username; 
} 

public String getPassword() { 
return password; 
} 

public void setPassword(String password) { 
this.password = password; 
} 

मेरी pom.xml

<dependency> 
<groupId>com.fasterxml.jackson.core</groupId> 
<artifactId>jackson-databind</artifactId> 
<version>2.5.1</version> 
</dependency> 

में के बाद कैसे इस समस्या को हल करने के लिए अपने एंड्रॉयड कोड

HttpParams httpParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParams, 5000); 
    HttpConnectionParams.setSoTimeout(httpParams, 5000); 
    HttpClient httpclient = new DefaultHttpClient(httpParams); 
    HttpPost httppost = new HttpPost("http://localhost:8080/datarequest"); 
    JSONObject json = new JSONObject(); 


     json.put("action", "check_login"); 
     json.put("username","name"); 
     json.put("password", "password"); 


    JSONArray postjson = new JSONArray(); 
    postjson.put(json); 

    httppost.setHeader("json", json.toString()); 
    httppost.getParams().setParameter("jsonpost", postjson); 

    System.out.println(postjson); 
    HttpResponse response = httpclient.execute(httppost); 

है?

उत्तर

1

उपयोग Jackson ObjectMapper:

ObjectMapper mapper = new ObjectMapper(); 
LoginRequest login = mapper.readValue(headerStr, LoginRequest.class); 
+0

धन्यवाद यह @Stefan Lindenberg –

9

आप जहां कुंजी संपत्ति से मेल खाते हैं अपने विधि में तर्क

public @ResponseBody String getMethod(@RequestBody LoginRequest loginRequest) 

को इस तरह से LoginRequest वर्ग instantiated और json मूल्य के लिए बाध्य किया जाएगा बदलना चाहिए

इसके अलावा, सुनिश्चित करें कि आप शरीर के हिस्से के रूप में जेसन भेजते हैं, निम्नलिखित

जोड़ें
StringEntity se = new StringEntity(json.toString(), "UTF8"); 
se.setHeader("Content-type", "application/json"); 
post.setEntity(se); 

HttpResponse response = httpclient.execute(httppost); लाइन से पहले

+1

यह भी सुनिश्चित करें जैक्सन dependeny बनाने के लिए की जरूरत है वहाँ काम करता है http://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind /2.5.4 –

+0

क्लाइंट कोड जोड़ें, वह हिस्सा जहां आप एक अनुरोध भेजते हैं –

+0

मैंने ऊपर अपना कोड अपडेट किया लेकिन अभी भी आउटपुट नहीं मिला ??? @Master Slave –

संबंधित मुद्दे