假设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