2015-06-16 5 views
9

Ho ricevuto dati json dall'applicazione Android nel mio controller Spring MVC utilizzando il seguente codice.JSON data binding in spring mvc

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"; 
} 

L'uscita del System.out.println (headerStr) è il

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

ma voglio associare questi dati JSON per classe seguente.

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; 
} 

nel mio pom.xml

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

seguito è il mio codice di Android

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); 

Come risolvere questo problema?

risposta

1

Utilizzare la Jackson ObjectMapper:

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

Grazie lì funziona @Stefan Lindenberg –

9

si dovrebbe cambiare gli argomenti nel metodo per

public @ResponseBody String getMethod(@RequestBody LoginRequest loginRequest) 

questo modo la classe LoginRequest sarà istanziato e legato al valore di JSON in cui chiavi corrispondono alla proprietà

Inoltre, assicurarsi di inviare il json come parte del corpo, aggiungere il seguente

StringEntity se = new StringEntity(json.toString(), "UTF8"); 
se.setHeader("Content-type", "application/json"); 
post.setEntity(se); 

prima della linea HttpResponse response = httpclient.execute(httppost);

+1

inoltre necessario assicurarsi che Jackson dependeny è http://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind /2.5.4 –

+0

aggiungi il codice cliente, la parte dove hai inviato una richiesta –

+0

ho aggiornato il mio codice sopra ma non ho ancora ricevuto l'output ??? @ Master Slave –