假設Animal
是我項目中的一個抽象類,並且我有一個REST資源(在JAX-RS服務器上,使用Jackson進行(反)序列化)一個PUT
來操縱存儲在我的數據庫中的動物。他們有具體的類型,剩下的資源規定請求的路徑類型:Jackson和JAX-RS:根據@PathParam類型解析抽象類型
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{entityType}/{id: \\d+}")
public <T extends Animal> void putAnimal(@PathParam("entityType") String entityType, @PathParam("id") String id, Animal input) throws IOException {
//...
}
我想用entityType
挑水泥類(Dog
或Cat
或任何反序列化,爲entityType
是dog
或cat
或其他)。對於這裏解釋太複雜的原因,我在不能把類型信息放在JSON輸入本身。
所以AIUI註釋Animal
用自定義TypeIdResolver
或類似的東西不能幫助我,因爲類型信息不會在JSON本身(這是類型解析器將獲得的所有信息)。我打算使用自定義的MessageBodyReader
,但據我所知,這不會從其方法readValue
中傳遞的正文中獲取其他參數值,所以我不知道要反序列化成什麼。
我錯過了什麼?如果這種方法失敗了,我怎麼才能完成我想要的,而不需要指定特定於動物的端點(這會導致大量重複的代碼以及失去通用性 - 現在我可以添加Animal
的子類,並且此代碼將工作正常,這是非常好的。)
經過測試,第一次工作完美無瑕。太棒了,非常感謝! – Gijs 2013-03-04 13:53:42