Spring JSON请求体未映射到Java POJO
我正在使用Spring来实现RESTful Web服务。 其中一个端点将JSON字符串作为请求体,我希望将其映射到POJO。 但是,现在似乎传入的JSON字符串不是映射到POJO的属性。
这是@RestController接口
@RequestMapping(value="/send", headers="Accept=application/json", method=RequestMethod.POST) public void sendEmails(@RequestBody CustomerInfo customerInfo);
数据模型
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; } }
最后我的POST请求:
{"CustomerInfo":{"firstname":"xyz","lastname":"XYZ"}}
Content-Type指定为application / json
但是,当我打印出对象值时,打印出默认值(“first”和“last”)而不是我传入的值(“xyz”和“XYZ”)
有谁知道为什么我没有得到我预期的结果?
固定
事实certificate,请求体的值没有传入,因为我不仅需要在我的界面中使用@RequestBody注释,而且还需要实际的方法实现。 有了这个,问题就解决了。
事实certificate,请求体的值没有传入,因为我不仅需要在我的界面中使用@RequestBody注释,而且还需要实际的方法实现。 有了这个,问题就解决了。
格式化很糟糕,但这应该适用于jackson配置。
另外,正如评论中所提到的,您的JSON对您的对象是错误的。
{"firstname":"xyz","lastname":"XYZ"}
看起来确实是您对象的正确JSON。
你可以通过多种方式实现这一目标,我将以不同的方式实现这一目标 –
NOTE:
请求数据为{“customerInfo”:{“firstname”:“xyz”,“lastname”:“XYZ”}}
1st way
我们可以将以上数据绑定到地图上,如下所示
@RequestMapping(value = "/send", headers = "Accept=application/json", method = RequestMethod.POST) public void sendEmails(@RequestBody HashMap> requestData) { HashMap customerInfo = requestData.get("customerInfo"); String firstname = customerInfo.get("firstname"); String lastname = customerInfo.get("lastname"); //TODO now do whatever you want to do. }
我们可以将它直接绑定到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; } }
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; } }
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 }
我希望它会帮助你。 谢谢
样本数据 :
[ { "targetObj":{ "userId":1, "userName":"Devendra" } }, { "targetObj":{ "userId":2, "userName":"Ibrahim" } }, { "targetObj":{ "userId":3, "userName":"Suraj" } } ]
对于上面的数据,这个pring控制器方法为我工作:
@RequestMapping(value="/saveWorkflowUser", method = RequestMethod.POST) public void saveWorkflowUser (@RequestBody List>> userList ) { System.out.println(" in saveWorkflowUser : "+userList); //TODO now do whatever you want to do. }
从默认构造函数中删除这两个语句并尝试