2015-06-16 14 views
9

Otrzymałem json danych z aplikacji Android w moim Spring MVC kontrolera za pomocą następującego kodu.Wiązanie danych JSON na wiosnę 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"; 
} 

Wyjście System.out.println (headerStr) jest

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

ale chcę, aby powiązać te dane json na następujące klasy.

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

w moim pom.xml

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

Poniżej mój kod 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); 

Jak rozwiązać ten problem?

Odpowiedz

1

Użyj Jackson ObjectMapper:

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

Dzięki działa @Stefan Lindenberg –

9

Należy zmienić argumenty w swojej metody

public @ResponseBody String getMethod(@RequestBody LoginRequest loginRequest) 

ten sposób klasa LoginRequest zostanie natychmiast i związanego z wartością json gdzie klucze pasujące właściwość

Upewnij się także, że wysyłasz json jako część ciała, dodaj następującą instrukcję:

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

przed linią HttpResponse response = httpclient.execute(httppost);

+1

Ponadto należy upewnić się, Jackson dependeny jest tam http://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind /2.5.4 –

+0

dodać kod klienta, część, w której wysyłasz żądanie –

+0

zaktualizowałem mój kod powyżej, ale nadal nie otrzymuję danych wyjściowych? @Master Slave –

Powiązane problemy