【发布时间】:2019-05-19 09:07:03
【问题描述】:
我有以下 JSON 请求
{
"FreightCalculationRequest": {
"Products": [
{
"sku": "123",
"size": "S",
"quantity": "1",
"shipAlone": "True",
"itemType": "Shoe"
},
{
"sku": "123",
"size": "S",
"quantity": "1",
"shipAlone": "True",
"itemType": "Shoe"
}
],
"ShipToZip": "54452",
"IsCommercial": "True"
}
}
我正在尝试将此请求作为自定义 java 对象发送到 API 控制器方法,然后将相同的对象作为 json 格式的字符串返回。但是,我通过邮递员得到回复,对于产品,shiptoZip 我得到一个空值,对于 isCommercial 我得到假,但我什至没有 false 作为请求中 isCommercial 的值。这是怎么回事?我不知道如何在 Java 中很好地调试,因为我基本上每次都通过输入 mvn spring-boot:start 来检查我的应用程序
这是我返回的对象,并将其用作控制器方法的参数。
public class FreightCalculationRequest {
private Product[] Products;
private String ShipToZip;
private boolean IsCommercial;
public Product[] getProducts() { return this.Products; }
public void setProducts(Product[] itemsRequest) { this.Products = itemsRequest; }
public String getShipToZip() { return this.ShipToZip; }
public void setShipToZip(String ShipToZip) { this.ShipToZip = ShipToZip; }
public boolean getIsCommercial() { return this.IsCommercial; }
public void setIsCommercial(boolean IsCommercial) { this.IsCommercial = IsCommercial; }
}
这是我正在调用的控制器方法
@RequestMapping(value = "/test", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.POST)
FreightCalculationRequest TestCall(@RequestBody FreightCalculationRequest calculationRequest) {
return calculationRequest;
}
为什么我的响应与进来的请求不一样。
更新: 我在变量中添加了@JsonProperty,现在响应看起来像这样
{
"isCommercial": false,
"shipToZip": null,
"products": null,
"Products": null,
"ShipToZip": null,
"IsCommercial": false
}
有点失落,也意识到我可以在 mvn 运行时保存我的更改,它会自动编译更改
更新: 因此,当我最初删除 json 响应中“FreightCalculationRequest”的包装时,我的 json 中的 itemType 实际上抛出了一个错误,所以我认为这是问题所在,但是 itemType 实际上是代码中的一个对象,所以这是由于我没有放入有效属性并彻底读取 json 解析错误,我有两种解决方案,将响应包装在另一个类中,或者删除 FreightCalculationWrapping。
我还了解到我需要添加@JsonProperty 来映射json
非常感谢
【问题讨论】:
-
您的 JSON 请求看起来像另一个模型类包装了
FreightCalculationRequest属性。打开它,它应该可以工作。 -
@TheHeadRush 我试过了,现在我没有得到响应,而是得到一个 json 解析错误。
-
这是不遵循命名约定的情况。如果您遵循适当的约定,这将正常工作。例如
shipToZip不是ShipToZip。无论如何,这很奇怪,因为您在有效负载中混合了命名约定。 -
我看到我得到的错误实际上是一个不同的问题。