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

有谁知道为什么我没有得到我预期的结果?

使固定

所以结果是,请求体的值没有传入,因为我不仅需要在我的接口中有@RequestBody 注解,而且在实际的方法实现中。一旦我有了它,问题就解决了。

原文由 Y. Chen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 498
2 个回答

所以结果是,请求体的值没有传入,因为我不仅需要在我的接口中有@RequestBody 注解,而且在实际的方法实现中。一旦我有了它,问题就解决了。

原文由 Y. Chen 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以通过多种方式做到这一点,在这里我将通过以下不同的方式来做到这一点 -

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

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

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
    }

我希望它能帮助你。谢谢

原文由 sanjeevjha 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题