同一对象有多个实例时的Jackson json属性名称

问题描述

以这个例子为例:

class Car {
    Door leftDoor;
    Door rightDoor;

    Door getLeftDoor();
    Door getRightDoor();
}

class Door {
    String getType();
}

目标是拥有这个json:

{
    "Door.lefttype": "A","Door.righttype": "B"
}

我将对象映射器配置为仅将具有@JsonProperty的内容转换为Json。

如果我只有一扇门,我可以简单地将@JsonProperty("door.type")放在String getDoorType()上。但是由于存在多个相同类型的实例,所以我无法将注释放在最后一个类上。此外,我需要@JsonUnwrapped,因为我不希望它在json中建立层次结构。我想要这个:

door.lefttype: "A"

代替

door: {
    lefttype: "A"
}

到目前为止,我所拥有的(我正在使用接口+ mixins,因为我无法直接访问这些类):

public interface CarMixin {
    @JsonProperty
    @JsonUnwrapped
    Door getLeftDoor();

    @JsonProperty
    @JsonUnwrapped
    Door getRightDoor();
}

public interface DoorMixIn {
    @JsonProperty
    String getType();
}

我需要确切的名称,所以这还不够。我需要使用命名的JsonProperties

解决方法

我认为我对mixin的理解不如您对我的理解,我必须说我不清楚您修改现有类的局限性是什么,但我认为可能会遵循以下内容帮助:

class Car {
   Door leftDoor ;
   Door rightDoor ;

   @JsonProperty("Door.lefttype")
   String leftType() {
        return leftDoor.getType() ;
   }

   @JsonProperty("Door.righttype")
   String leftType() {
        return rightDoor.getType() ;
   }
}