簡體   English   中英

在Jersey中將復雜對象注入資源方法

[英]Inject complex object into resource method in Jersey

我正在使用Java 8開發RESTful服務。我的資源類中具有以下方法,該方法可響應POST請求。

@POST
public Response store(SomeType myInstance){ ... }

通常,在可以直接映射json請求的情況下,可以輕松進行此序列化。 但是,在這種情況下, SomeType是一個復雜的對象,其中包含持久保存在數據庫中的其他對象。

有沒有一種方法可以捕獲請求,弄清楚類型,構建對象SomeType ,然后將其傳遞給store方法? 我傾向於某種類型的中間件,但是我不太確定依賴項將如何工作。

注意:出於安全原因,我在可以使用的第三方包裝中非常有限。 所以我不能使用開箱即用的解決方案。

我認為您的用例可以通過Jackson的CustomDeserializer功能解決。

  1. 一般方法是為您需要支持的每種傳入類型創建一個類。 防爆。 SomeType1SomeType2SomeType3`
  2. 所有這些類都應擴展SomeType父類。
  3. SomeType父類應具有CustomDeserializer
  4. CustomDeserializer中,您可以檢查json字段以確定應將json反序列化為哪種類型。
  5. 然后,您可以使用JsonParser.readValueAs方法將json反序列化為所需的類型SomeType1SomeType2SomeType3
  6. 如果您需要從數據庫中獲取更多數據並填充SomeType1SomeType2SomeType3的字段, 可以在處理程序中通過檢查對象類型來做到這一點。

     @POST public Response store(SomeType myInstance) { if (myInstance instanceof SomeType1) { // fetch from database and populate more fields } else if (myInstance instanceof SomeType2) { ... } ... } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM