【问题标题】:How to set JsonProperty value dyanamically如何动态设置 JsonProperty 值
【发布时间】:2023-03-29 15:05:01
【问题描述】:

我想创建一个如下所示的 json 请求:

"additionalData": {
"riskdata.basket.item1.sku": "045155",
"riskdata.basket.item1.quantity": "1"
"riskdata.basket.item2.sku": "0451166",
"riskdata.basket.item2.quantity": "1"

...

"riskdata.basket.item4.sku": "0451111",
"riskdata.basket.item4.quantity": "2"

请建议如何在对象映射中动态设置 JsonProperty 值。

示例:deliveryMethod 是一个常量字段,因此我可以使用 JsonProperty 注释进行如下映射。但是,我如何将 JsonProperty 用于 sku 和数量,以便它接受尽可能多的数字。任何建议都会有所帮助。

public class AdditionalData implements java.io.Serializable
{
    @JsonProperty(value = "riskdata.deliveryMethod")
    private String deliveryMethod;
    @JsonProperty(value = "riskdata.basket.item??.sku")
    private String sku;
    @JsonProperty(value = "riskdata.basket.item??.quantity")
    private String quantity;
}

【问题讨论】:

  • 首先,这不是在 json 中构建数据的理想方式。理想情况下,您应该使用数组对象。
  • 谢谢!我知道这不是构建 json 的理想方式;但是这将被要求我们发送此特定格式的第 3 方应用程序接受。因此,任何帮助都会有所帮助。
  • 不幸的是,我认为唯一的另一种方法是自定义 ObjectMapper(编写自己的)并使用它自定义将对象转换为 json。

标签: java json


【解决方案1】:

您可以在AdditionalDataclass 中创建basket[] 数组属性。

public class AdditionalData implements java.io.Serializable
{
  @JsonProperty(value = "riskdata.deliveryMethod")
  private String deliveryMethod;

  @JsonProperty(value = "riskdata.basket")
  private Basket[] basket;
}

public class Basket implements java.io.Serializable
{
  @JsonProperty(value = "sku")
  private String sku;

  @JsonProperty(value = "quantity")
  private String quantity;
}

然后像这样改变你的 json 结构:

"additionalData": {
  "riskdata.basket": [
   {
      "sku": "045155",
      "quantity": 1"
   },
   {
      "sku": "045156",
      "quantity": 1"
   }]
}

【讨论】:

  • 感谢您分享详细信息。不幸的是,无法更改 json 结构,因为这将由 3rd 方应用程序使用。他们要求我们以我提到的结构发送 json 数据。最初,我实现了数组方法。有没有其他方法可以保持 json 结构相同。这对我来说非常重要。
猜你喜欢
  • 2018-05-29
  • 2018-11-29
  • 1970-01-01
  • 2018-10-05
  • 2011-10-28
  • 2023-03-09
  • 2010-09-05
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多