2017-09-08 42 views
0

不同我有一個類,如:使用傑克遜註釋JsonUnwrapped一個字段的名字來自它的getter

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; 
    } 
} 

和發動機類像

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; 
    } 
} 

我想使用Car對象轉換成JSON傑克遜與結構像

'car': { 
    'color': 'red', 
    'maxspeed': '200', 
    'fueltype': 'diesel', 
    'enginetype': 'four-stroke' 
} 

我試過答案在this提供,但它不起作用對於我來說,因爲字段名稱不同,那麼getter

我知道如果字段名稱是引擎,我可以在引擎上使用@JsonUnwrapped。但在這種情況下該怎麼辦。

回答

0

您應使用@JsonUnwrapped作爲汽車類所需的JSON對象如下:

class Car { 

    @JsonUnwrapped 
    private Engine myEngine; 

    @JsonProperty("color") 
    private String myColor; 

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

感謝您的快速回答,但這是行不通的。它在json中創建一個引擎對象 – learner

0

提供@JsonUnwrapped@JsonProperty在一起:

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

我覺得這裏最好的解決辦法是對Engine類中的myEngineType屬性使用@JsonValue註釋,它將僅序列化此屬性而不是整個Engine ob JECT。

所以,你的代碼會是這樣的:

class Engine { 

    @JsonProperty("fueltype") 
    private String myFueltype; 

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

} 

你可以看看this answer瞭解更多詳情。