2015-04-06 127 views
0

我需要一些幫助,將我的java響應重新分解爲客戶端。 所以這是我目前的反應,這是與jackson2序列化,並正常工作。Jackson將Java組合序列化爲json

public class PermissionResponse { 
    @JsonProperty 
    private Long id; 

    @JsonProperty 
    private String name; 

    @JsonProperty 
    private Long actionId; 

    @JsonProperty 
    private String actionName; 

    @JsonProperty 
    private Long resourceId; 

    @JsonProperty 
    private String resourceName; 

    @JsonProperty 
    private Long environmentId; 

    @JsonProperty 
    private String environmentName; 

    ... 
} 

代替,但路過設置

@JsonProperty 
private String actionName; 

@JsonProperty 
private Long actionId; 

我想有動作的實體(含這兩個領域 - actionName/nameactionId/id)。例如:

@JsonProperty 
private Action action; 

有人可以指向正確的方向,因爲我找不到我需要的東西。謝謝

+0

如果您的PermissionResponse對象具有獲取者和設置者,則不需要所有這些@JsonProperty註釋。您的嵌套Action對象應該自動序列化工具。你遇到什麼問題? – dnault 2015-04-06 08:07:25

回答

2

我並不是傑克遜的專家,但我認爲只要你能連載Action類,傑克遜(就像GSON)會將它串連到任何地方。

在GSON這將在以下

public class PermissionResponse { 

    private Long id; 
    private String name; 
    private Action action; 
    private Long resourceId; 
    private String resourceName; 
    private Long environmentId; 
    private String environmentName; 
} 

public class Action { 

    private Long id; 
    private String name 
} 

做你或許應該甚至使類兩種資源和環境如:

public class PermissionResponse { 

    private Long id; 
    private String name; 
    private Action action; 
    private Resource resource; 
    private Environment environment; 
} 

public class Action { 

    private Long id; 
    private String name; 
} 

public class Resource { 

    private Long id; 
    private String name; 
} 

public class Environment { 

    private Long id; 
    private String name; 
} 

以上的例子,與GSON兼容,因此你只需要和傑克遜一起嘗試一下,我確信一旦你輸入了所有正確的註釋,他們就可以正常工作。

編輯:變本加厲,你可以創建一個通用類如:

public class Permission { 

    private Long id; 
    private String name; 
} 

public class PermissionResponse extends Permission { 

    private Action action; 
    private Resource resource; 
    private Environment environment; 
} 

public class Action extends Permission { 

} 

public class Resource extends Permission { 

} 

public class Environment extends Permission { 

} 

,如果你沒有在增加什麼別的行動,資源環境或計劃,沒有這些類如:

public class Permission { 

    private Long id; 
    private String name; 
} 

public class PermissionResponse extends Permission { 

    private Permission action; 
    private Permission resource; 
    private Permission environment; 
} 

顯然,上述使用更少的代碼,但是你失去知道什麼類型的權限是(除非你知道你的對象之前)的能力。

相關問題