在名称与其getter不同的字段上使用jackson注释JsonUnwrapped

时间:2017-09-08 05:59:17

标签: java json jackson

我有一个类:

class Car {
    private Engine myEngine;

    @JsonProperty("color")
    private String myColor;  

    @JsonProperty("maxspeed")
    private int myMaxspeed;

    @JsonGetter("color")
    public String getColor()
    {
        return myColor;
    }

    @JsonGetter("maxspeed")
    public String getMaxspeed()
    {
        return myMaxspeed;
    }

    public Engine getEngine()
    {
        return myEngine;
    }
}

和Engine类似

class Engine {
    @JsonProperty("fueltype")
    private String myFueltype;

    @JsonProperty("enginetype")
    private String myEnginetype;

    @JsonGetter("fueltype")
    public String getFueltype()
    {
        return myFueltype;
    }

    @JsonGetter("enginetype")
    public String getEnginetype()
    {
        return myEnginetype;
    }
}

我想使用具有

结构的Jackson将Car对象转换为JSON
'car': {
   'color': 'red',
   'maxspeed': '200',
   'fueltype': 'diesel',
   'enginetype': 'four-stroke'
 } 

我已尝试在this中提供的答案,但它对我不起作用,因为字段名称与getter不同

我知道如果字段名称是引擎,我可以在引擎上使用@JsonUnwrapped。但是在这种情况下该怎么做。

3 个答案:

答案 0 :(得分:5)

@JsonUnwrapped@JsonProperty放在一起:

@JsonUnwrapped
@JsonProperty("engine")
private Engine myEngine;

答案 1 :(得分:0)

您应该在Car类中使用@JsonUnwrapped,如下所示JSON对象:

class Car {

    @JsonUnwrapped
    private Engine myEngine;

    @JsonProperty("color")
    private String myColor;  

    @JsonProperty("maxspeed")
    private int myMaxspeed;
    ...

答案 2 :(得分:0)

我认为这里最好的解决方案是对@JsonValue类中的myEngineType属性使用Engine注释,它只会序列化此属性而不是整个Engine对象。

所以你的代码就像这样:

class Engine {

    @JsonProperty("fueltype")
    private String myFueltype;

    @JsonValue
    @JsonProperty("enginetype")
    private String myEnginetype;

}

您可以查看this answer了解详情。