2016-05-13 49 views
2

我們有一個使用後端服務來獲取Metric對象列表的前端服務。我們爲後端服務編寫了一個Java ClientSDK,以便爲該服務的客戶端應用程序的開發工作提供便利。將Java對象的子集公開給JSON

我們還公開了來自前端服務的度量標準列表。目前,我們直接公開並將後端Metric對象轉換爲JSON。

我擔心的是,如果對後端Metric對象進行更改 - 比如開發人員添加了新的祕密ID字段 - 我們不希望將其從前端服務中公開。

我們還在爲前端服務編寫clientSDK。我們不希望從後端客戶端SDK中引用Metric類,因此邏輯選項是在前端SDK中定義一個類似的Metric對象。

我不想浪費CPU週期將1000個指標從一個類定義複製到另一個類定義。

有沒有一種方法可以指定從轉換爲JSON的後端Metric到Metric的前端定義的哪些字段?更好的是,我可以將前端定義引用到JSON轉換器,因爲我要求它編組後端對象嗎?

我們使用Jackson和Spring rest框架來處理上下文,但是我很樂意將它放在心跳中,因爲通過註釋封送對象似乎是造成此問題的根本原因。

回答

3

看看Jackson's JsonView構造。

我可以看到你的例子看起來像這樣:

class Views { 
    static class Client {} 
    static class Backend extends Client {} 
} 

public class Metric { 
    @JsonView(Views.Client.class) String metricName; 
    @JsonView(Views.Client.class) String count; 
    @JsonView(Views.Backend.class) String secretKey; 
} 

@JsonView註釋支持春季@ResponseBody註解的方法爲Spring 4.1

+0

還有一個'@ JsonIgnore'註釋,這取決於OP的確切設置可能是更容易的選擇。 – ingenious

0

由於Nicholas Hausschild建議您可以通過使用您的編組/解編框架進行註釋來實現此目的。

但是你可以簡單地使用繼承和鑄造這樣的:

class SomeSuperClass { 
    String exposeThis; 
    String exposeThat; 
    // getters and setters... 
} 

class SomeSubClass extends SomeSuperClass { 
    String doNotExposeThis; 
    // getters and setters... 
} 

這樣返回一個對象到JSON解析器的時候可以轉換爲超類,並在同一時間使用的子類內部來攜帶您不想公開的其他信息。