【问题标题】:Add wrapping to JSON POJO without additional Wrapper classes向 JSON POJO 添加包装,无需额外的 Wrapper 类
【发布时间】:2021-09-02 16:31:20
【问题描述】:

我想通过 REST 与另一个应用程序通信,该应用程序使用带有多层包装的 JSON。 例如:

我有以下 POJO 类:

@XmlRootElement
@AllArgsConstructor
@NoArgsConstructor
public class Message {
    @Getter
    @Setter
    @XmlElement(name="meta")
    private WrapperMeta metaParameters;
    
    @Getter
    @Setter
    @XmlElement(name="message")
    private WrapperMessage messageParameters;
}

包装类:

    @Getter
    @Setter
    @XmlElement(name="parameters")
    private MetaParameters meta;
}

从中生成的 JSON:

{
  "meta": {
    "parameters": {
        "service": "some",
        "sender": {
            "id": "2",
            "name": "Jane Doe"
        }
    }
  },
  "message": {
    "parameters": {
      "message": "hi"
      "sent": 1630597537
    }
  }
}

我想摆脱 Wrapper 类,而是有一个更优雅的解决方案。

例如,使用注释,如下所示:

@XmlRootElement
@AllArgsConstructor
@NoArgsConstructor
public class Message {
    @Getter
    @Setter
    @XmlElementWrapper(name="meta")
    @XmlElement(name="parameters")
    private MetaParameters metaParameters;
    
    @Getter
    @Setter
    @XmlElementWrapper(name="message")
    @XmlElement(name="parameters")
    private MessageParameters message;
}

XmlElementWrapper 注释似乎只为 XML 添加包装,而不是 JSON。

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    将您的@XmlElement 替换为@JsonProperty。像这样,

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public class Message {
        @JsonProperty("meta")
        private WrapperMeta metaParameters;
        
        @JsonProperty("message")
        private WrapperMessage messageParameters;
    }
    

    像这样更改您的 WrapperMessage 课程。

    @Getter
    @Setter
    public class WrapperMessage {
        @JsonUnwrapped
        private MetaParameters meta;
    }
    

    注意:您可以在班级级别添加Getter@Setter。像上面的例子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2021-12-20
      • 1970-01-01
      • 2019-04-18
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多