杰克逊 - 将单个json密钥映射到多个变量

时间:2016-05-12 07:11:17

标签: java json jackson

使用fastxml jackson mapper,在尝试将相同的json键映射到pojo中的多个变量时获得低于异常。但是一些用例需要映射,所以有没有任何工作选项可以解决这个问题,解决pojo的任何变化。

例外:

Conflicting setter definitions for property "vno"

json:

{"vno":"123556"}

POJO:

@JsonProperty(value="vno")
public String getVno(String vno)

@JsonProperty(value="vno")
public String getIdno(String idno)

1 个答案:

答案 0 :(得分:1)

问题

您的POJO中不能有两个vno映射属性:

@JsonProperty(value = "vno")
public void setVno(String vno) {
    ...
}

@JsonProperty(value = "vno")
public void setIdno(String idno) {
    ...
}

处理吸气剂

你能做的是:

  • 创建一个使用@JsonProperty注释的方法,以确定将为vno属性返回哪个值。
  • 使用@JsonIgnore注释其他getter方法。

有关详细信息,请参阅以下代码:

@JsonIgnore
public String getVno() {
    ...
}

@JsonIgnore
public String getIdno() {
    ...
}

@JsonProperty(value = "vno")
public String getValueForVnoProperty() {
    // Decide which value will be returned
    ...
}

处理setter

Simmilary对上述方法,你可以有以下几点:

  • 创建一个使用@JsonProperty注释的方法,以确定将vno属性的值设置在哪个属性中。
  • 使用@JsonIgnore注释其他setter方法。

请参阅以下代码:

@JsonIgnore
public void setVno(String vno) {
    ...
}

@JsonIgnore
public void setIdno(String idno) {
    ...
}

@JsonProperty(value = "vno")
public void setValueForVnoProperty(String value) {
    // Decide in which property the value will be set
    ...
}