处理不同的JSON请求Jackson

问题描述 投票:2回答:2

我正在一个项目中,我需要使用两种不同格式向远程服务发送请求

格式1:

{
"templateId": "template1",
"configurationData": {
   "inboundHeaders": [
     {
      "key": "header1",
      "value": "value1"
     }, {
      "key": "header2",
      "value": "value2"
     }, {
      "key": "header3",
      "value": "value3"
     }
    ],
    "outboundHeaders": [
     {
      "key": "header4",
      "value": "value4"
     }, {
      "key": "header5",
      "value": "value5"
     }, {
      "key": "header6",
      "value": "value6"
     }
    ]
}
}

格式2

{
    "templateId": "template1",
    "configurationData": {
           "inboundHeaders": "head1",
           "outboundHeaders" : "head2,head3"
        }
}

现在我已经创建了一个班级

@JsonPropertyOrder({ "inboundHeaders", "outboundHeaders"})

public class ConfigurationData {

@JsonProperty("inboundHeaders")
private List<Header> inboundHeaders = null;

@JsonIgnore
@JsonProperty("outboundHeaders")
private List<Header> outboundHeaders = null;

@JsonProperty("inboundHeaders")
private String inboundHeader = null;

@JsonProperty("outboundHeaders")
private String outboundHeader = null;

}

信件和二传手会去这里。...

但是当我执行此程序时。显然,我正在遵循以下异常,例如

com.fasterxml.jackson.databind.JsonMappingException:表示属性的多个字段

如何在一个java.util.List POJO中处理这两种不同版本的请求[java.lang.StringJson

java spring-boot jackson
2个回答
1
投票

我认为您有两个选择。

  1. 创建两个类和两个方法来调用远程服务,例如:

列表

@JsonPropertyOrder({ "inboundHeaders", "outboundHeaders"})
public class ConfigurationDataLists {
    @JsonProperty("inboundHeaders")
    private List<Header> inboundHeaders = null;

    @JsonIgnore
    @JsonProperty("outboundHeaders")
    private List<Header> outboundHeaders = null;
}

字符串

@JsonPropertyOrder({ "inboundHeaders", "outboundHeaders"})
public class ConfigurationDataString {
    @JsonProperty("inboundHeaders")
    private String inboundHeader = null;

    @JsonProperty("outboundHeaders")
    private String outboundHeader = null;
}
  1. 使用地图

我会选择选项1。


0
投票

您不能像以前一样对不同的属性使用相同的名称。例如。 -inboundHeaders。

您必须更改属性名称之一。简单来说,您必须保持@ JsonProperty唯一。

© www.soinside.com 2019 - 2024. All rights reserved.