java - RequestBody 未映射到对象

标签 java rest spring-mvc

Requestbody 没有映射到我在这里使用的对象。 PaymentRequest 中的所有字段都为空。我看到注释和映射一切似乎都是正确的。

@RestController
@RequestMapping("/pay")
public class PaymentServiceAPIImpl {

    @RequestMapping(value = "/request", method = RequestMethod.POST)
    public Response submitPaymentRequest(@RequestBody PaymentRequest paymentRequest) {
        System.out.println(paymentRequest.getClientId()); // here I am getting all the fields are null
        return Response.ok().build();
    }
}    

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "payment_request", namespace = "http://www.abc-services.com/payment_request", propOrder = { "currencyCode", "clientId" })
public class PaymentRequest implements Serializable {

    private static final long serialVersionUID = 1L;
    @XmlElement(name = "currency_code")
    protected String currencyCode;
    @XmlElement(name = "client_id")
    protected String clientId;

    public String getCurrencyCode() {
        return currencyCode;
    }
    public void setCurrencyCode(String value) {
        this.currencyCode = value;
    }
    public String getClientId() {
        return clientId;
    }
    public void setClientId(String value) {
        this.clientId = value;
    }
}

这是请求

 curl -X POST \
  http://localhost:8080/pay/request \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: fead689c-239-284bb2116ae2' \
  -d '{
    "payment_token": {
        "client_id": "cyber",
        "currency_code": "USD"
    }
}'

将这样的付款请求放入 Controller :

PaymentRequest {
     clientId: null,
     cardType: null,
     cardIssuer: null
 }

是否有任何指示说明请求未映射到 PaymentRequest?

最佳答案

您的代码不会映射数据,因为 JSON 是一个具有名为 payment_token 的单个属性的对象,并且您的参数类型 PaymentRequest 没有以下属性那个名字。

将有效负载更改为:

{
    "client_id": "cyber",
    "currency_code": "USD"
}

或者更改参数类型以使用此类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "payment_wrapper", namespace = "http://www.abc-services.com/payment_wrapper", propOrder = { "paymentToken" })
public class PaymentWrapper {

    @XmlElement(name = "payment_token")
    protected PaymentRequest paymentToken;

    public PaymentRequest getPaymentToken() {
        return paymentToken;
    }
    public void setPaymentToken(PaymentRequest value) {
        this.paymentToken = value;
    }
}

关于java - RequestBody 未映射到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51275632/

相关文章:

c# - 如何访问失败的 Hangfire 作业

java - 在 Spring Rest get 请求中映射 100 多个 url 参数

java - HTTP 状态 404 Apache Tomcat 错误 Spring MVC Java?

jquery - 如何从 jQuery 获取 ajax 请求下载 Excel

java - 在 Bluemix 上运行 Spring Boot 应用程序时出错

java - Eclipse SVN Subversive - 忽略我的所有文件

java - 是否有一种java模式可以让进程不断运行以轮询或监听队列中的消息并处理它们?

java - JLayeredPane 中未显示图形(java swing)

java - Spring REST Hibernate 应用设计

java - 我的自定义存储库实现中的 CrudRepository