Java JAX-RS客户端-如何使用Jackson从JSON反序列化通用参数
为了代码的可重用性,我有一个超级接口和一些扩展接口,例如:Java JAX-RS客户端-如何使用Jackson从JSON反序列化通用参数,java,json,rest,cxf,Java,Json,Rest,Cxf,为了代码的可重用性,我有一个超级接口和一些扩展接口,例如: public interface AbstractService<T extends AbstractDto> { @GET @Path("/") @Produces("application/json") T get(@QueryParam("id") Long id); } @WebService @Path("/office") public interface OfficeServi
public interface AbstractService<T extends AbstractDto> {
@GET
@Path("/")
@Produces("application/json")
T get(@QueryParam("id") Long id);
}
@WebService
@Path("/office")
public interface OfficeService extends AbstractService<OfficeDto> { }
由于java.lang.ClassCastException失败:java.util.LinkedHashMap无法强制转换为OfficeDto
如果我删除泛型,一切都很好(除了所有服务中重复的代码)。jackson似乎不明白服务的T
是实际的OfficeDto
,并且无法返回到LinkedHashMap键值对反序列化(这对于JavaScript很好,但对于Java客户端则不行)
如何在JAX-RS中使用通用参数?当前的实现是Apache CXF 3.1,但在切换到Jersey时似乎仍然存在相同的问题
OfficeService service = JAXRSClientFactory.create("http://...", OfficeService.class,
Arrays.asList(new Object[] {
new org.codehaus.jackson.jaxrs.JacksonJsonProvider()
}));
OfficeDto office = service.get(1L); // exception!