JSON spring mvc 中的数据绑定
JSON data binding in spring mvc
我使用以下代码从我的 Spring MVC 控制器中的 android 应用程序收到了 json 数据。
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";
}
System.out.println(headerStr) 的输出为
{"action":"check_login","password":"test","username":"test"}
但我想将此 json 数据绑定到以下 class。
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>
以下是我的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);
如何解决这个问题?
ObjectMapper mapper = new ObjectMapper();
LoginRequest login = mapper.readValue(headerStr, LoginRequest.class);
您应该将方法中的参数更改为
public @ResponseBody String getMethod(@RequestBody LoginRequest loginRequest)
这样 LoginRequest
class 将被实例化并绑定到 json 键匹配 属性
的值
此外,请确保将 json 作为正文的一部分发送,添加以下内容
StringEntity se = new StringEntity(json.toString(), "UTF8");
se.setHeader("Content-type", "application/json");
post.setEntity(se);
HttpResponse response = httpclient.execute(httppost);
行之前
我使用以下代码从我的 Spring MVC 控制器中的 android 应用程序收到了 json 数据。
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";
}
System.out.println(headerStr) 的输出为
{"action":"check_login","password":"test","username":"test"}
但我想将此 json 数据绑定到以下 class。
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>
以下是我的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);
如何解决这个问题?
ObjectMapper mapper = new ObjectMapper();
LoginRequest login = mapper.readValue(headerStr, LoginRequest.class);
您应该将方法中的参数更改为
public @ResponseBody String getMethod(@RequestBody LoginRequest loginRequest)
这样 LoginRequest
class 将被实例化并绑定到 json 键匹配 属性
此外,请确保将 json 作为正文的一部分发送,添加以下内容
StringEntity se = new StringEntity(json.toString(), "UTF8");
se.setHeader("Content-type", "application/json");
post.setEntity(se);
HttpResponse response = httpclient.execute(httppost);
行之前