当前位置: 首页 > 知识库问答 >
问题:

Spring JSON请求主体未映射到Java POJO

佟英武
2023-03-14

我正在使用Spring实现一个RESTful web服务。其中一个endpoint接收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;
    }
}

最后是我的发帖请求:

{"CustomerInfo":{"firstname":"xyz","lastname":"XYZ"}}

与内容类型指定为应用程序/json

但是,当我打印出对象值时,打印出的是默认值(“first”和“last”),而不是我传入的值(“xyz”和“xyz”)

有人知道为什么我没有得到我期望的结果吗?

修复

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

共有3个答案

太叔京
2023-03-14

这上面的格式很糟糕,但这应该适用于jackson配置。

<!-- Use Jackson for JSON conversion (POJO to JSON outbound). -->
<bean id="jsonMessageConverter"
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> 

<!-- Use JSON conversion for messages -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jsonMessageConverter"/>
        </list>
    </property>
</bean>

同样,正如注释中提到的,您的JSON对于您的对象是错误的。

{"firstname":"xyz",‌​"lastname":"XYZ"}

似乎是对象的正确JSON。

卫沈义
2023-03-14

你可以用很多方法来做,这里我将用下面不同的方法来做-

注意:请求数据应该是{“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.
}

第二种方法我们可以直接将其绑定到pojo

步骤1创建dto类UserInfo.java

public class UserInfo {
    private CustomerInfo customerInfo1;

    public CustomerInfo getCustomerInfo1() {
        return customerInfo1;
    }

    public void setCustomerInfo1(CustomerInfo customerInfo1) {
        this.customerInfo1 = customerInfo1;
    }
}

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

步骤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
    }

我希望它能帮助你。谢谢

汪才
2023-03-14

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

 类似资料:
  • 我的http请求发送到此: 我的超文本传输协议请求与正文: { 我想通过WireMock映射这个请求。 这里是WireMock的映射文件。 我这样开始wireMock: 但当请求启动时,WireMock不会映射此请求。什么都没发生。为什么?

  • Web 容器需要本章描述的映射技术去映射客户端请求到 Servlet(该规范2.5以前的版本,使用这些映射技术是作为一个建议而不是要求,允许servlet 容器各有其不同的策略用于映射客户端请求到 servlet)。

  • 我想映射类主题到主题表。 主题。JAVA 主题。哈佛商学院。xml 冬眠cfg。xml 我正在读取csv文件的内容,并希望使用以下代码将其插入数据库。 管理ata.java 我得到以下错误 线程“main”组织中出现异常。冬眠MappingException:未知实体:组织中的主题。冬眠impl。SessionFactoryImpl。getEntityPersister(SessionFactor

  • 带有消息“访问https://api.sandbox.paypal.com/v1/payments/payments/payment时获得Http响应代码400”的异常“PayPal\exception\PaypalConnectionException”。“在/var/www/html/vendor/paypal/rest-api-sdk-php/lib/paypal/core/paypalht

  • 我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。