Y. *_*hen 22 java spring json spring-mvc jackson
我正在使用Spring来实现RESTful Web服务.其中一个端点将JSON字符串作为请求体,我希望将其映射到POJO.但是,现在似乎传入的JSON字符串不是映射到POJO的属性.
这是@RestController接口
@RequestMapping(value="/send", headers="Accept=application/json", method=RequestMethod.POST)
public void sendEmails(@RequestBody CustomerInfo customerInfo);
Run Code Online (Sandbox Code Playgroud)
数据模型
public class CustomerInfo {
private String firstname;
private String lastname;
public CustomerInfo() {
this.firstname = "first";
this.lastname = "last";
}
public CustomerInfo(String firstname, String lastname)
{
this.firstname = firstname;
this.lastname = lastname;
}
public String getFirstname(){
return firstname;
}
public void setFirstname(String firstname){
this.firstname = firstname;
}
public String getLastname(){
return lastname;
}
public void getLastname(String lastname){
this.lastname = lastname;
}
}
Run Code Online (Sandbox Code Playgroud)
最后我的POST请求:
{"CustomerInfo":{"firstname":"xyz","lastname":"XYZ"}}
Run Code Online (Sandbox Code Playgroud)
Content-Type指定为application/json
但是,当我打印出对象值时,默认值("first"和"last")被打印出来而不是我传入的值("xyz"和"XYZ")
有谁知道为什么我没有得到我预期的结果?
固定
事实证明,请求体的值没有传入,因为我不仅需要在我的界面中使用@RequestBody注释,而且还需要实际的方法实现.有了这个,问题就解决了.
您可以通过多种方式进行操作,在这里,我将以以下不同的方式进行操作:
NOTE: 请求数据应为{“ customerInfo”:{“ firstname”:“ xyz”,“ lastname”:“ XYZ”}}
1st way 我们可以将上述数据绑定到地图,如下所示
@RequestMapping(value = "/send", headers = "Accept=application/json", method = RequestMethod.POST)
public void sendEmails(@RequestBody HashMap<String, HashMap<String, String>> requestData) {
HashMap<String, String> customerInfo = requestData.get("customerInfo");
String firstname = customerInfo.get("firstname");
String lastname = customerInfo.get("lastname");
//TODO now do whatever you want to do.
}
Run Code Online (Sandbox Code Playgroud)
2nd way 我们可以直接将它绑定到pojo
step 1 创建dto类 UserInfo.java
public class UserInfo {
private CustomerInfo customerInfo1;
public CustomerInfo getCustomerInfo1() {
return customerInfo1;
}
public void setCustomerInfo1(CustomerInfo customerInfo1) {
this.customerInfo1 = customerInfo1;
}
}
Run Code Online (Sandbox Code Playgroud)
step 1. 创建另一个dto类CustomerInfo.java
class CustomerInfo {
private String firstname;
private String lastname;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
Run Code Online (Sandbox Code Playgroud)
step 3 将请求正文数据绑定到pojo
@RequestMapping(value = "/send", headers = "Accept=application/json", method = RequestMethod.POST)
public void sendEmails(@RequestBody UserInfo userInfo) {
//TODO now do whatever want to do with dto object
}
Run Code Online (Sandbox Code Playgroud)
希望对您有所帮助。谢谢
| 归档时间: |
|
| 查看次数: |
39278 次 |
| 最近记录: |