本質上,我有一個MessageBodyWriter將對象寫爲JSON,我希望能夠根據哪個資源方法處理請求來控制輸出的某些方面。但是,@Provider類的默認生命週期是單例(每個JVM一個),所以我不能注入某個配置對象的實例。這給我留下了2個明顯的解決方法:如何在每個請求的基礎上配置JAX-RS MessageBodyWriter?
- 使用自定義的註釋:對的writeTo(...)每個調用包括被調用的方法註釋的名單,所以我可以檢查一些存在註解。但是,JAX-RS方法已經非常適合元編程。
- 使用ThreadLocal屬性映射:假設每個線程有一個請求,但是這種方法會破壞封裝。資源方法需要注意到有一些其他課程在尋找這張地圖。
有沒有辦法改變提供程序本身的生命週期?我正在使用澤西島。
爲了澄清,它沒有區分JSON和非JSON,而是如何格式化JSON,或者過濾它。因此,最終同一位作者參與其中。使用請求對象與ThreadLocal屬性非常相似,但有趣的是每個請求上下文將在每個請求(不知道)上正確注入。 – Shaun 2013-05-02 17:56:27
是的,使用'@ Context'的每個請求對象都基於線程本地代理。所以你不需要實現你自己的ThreadLocal屬性映射來做同樣的事情。 – Willy 2013-05-03 02:03:23