2017-03-21 44 views
0

我建立將要接受來自不同客戶端的請求的應用程序,並將它們發送到單個輸出相同的方式。這些客戶端將發送不同的JSON請求,最終需要進行轉換,然後提交給最終服務。我的意思的例子..最佳實踐接受多個輸入和處理它們

客戶端A柱對象A的JSON端點/客戶端A。這個請求被轉換成一個對象FinalObject並通過ServiceA提交給一個工作隊列,該ServiceA被處理併發送到FinalEndpoint。

ClientB帖子對象B爲JSON端點/ clientB。這個請求被轉換成一個對象FinalObject並通過ServiceA提交給一個工作隊列,該ServiceA被處理併發送到FinalEndpoint。

我想避免儘可能複製的代碼。我真的不確定要做到這一點的最佳方式是什麼。 ObjectA和ObjectB中的字段完全不同,需要進行格式化和計算才能派生FinalObject。我想我會需要某種變形器來轉換爲適當的對象,我只是不確定要使用什麼樣的模式。

任何幫助是極大的讚賞。謝謝。

回答

0

我將創建一個由對象A和對象B實現的公共接口,該接口可以同時包含對象A和對象B場,讓界面是_對象,每個實現可能包含返回FinalObject的變換方法和做不同地爲對象A和對象B的轉變,這是一個例子:

1- FinalObject類

public class FinalObject { 
    // FinalObject implementation here 
} 

2-接口

interface ObjectX { 
    public FinalObject getFinalObject(); 
    // define any other common methods that you might need for both objects 
} 

3-對象A

public class ObjectA implements ObjectX { 
    // define any special fields 
    @override 
    public FinalObject getFinalObject(){ 
     // implement conversion of ObjectA to FinalObject here 
    } 
// implement any other methods you need 
} 

4-對象B

public class ObjectB implements ObjectX { 
    // define any special fields 
    @override 
    public FinalObject getFinalObject(){ 
     // implement conversion of ObjectB to FinalObject here 
    } 
// implement any other methods you need 
} 

和用於服務它可能是一個單一的服務區分取決於JSON值使用哪個實施方式中,也可以使用每個客戶端訪問服務控制器上不同的方法的不同路徑/參數。 我希望這是你正在尋找的答案。

0

最通用的解決方案:你定義端點(如果您使用的是用SpringMVC可以/工藝/ $ {} EVENTTYPE /)接受一些JSON的身體。基於eventType(它可以是url或urlParam的一部分),您可以決定使用json的轉換器。

Map<String, JsonConvertor> converters = new HashMap<>(); 
//init convertos map with possible cases you want to handle 

//in controller method 
outputResult = converters.get(eventType).convert(inputJson) 
sendResult(ouputResult)