使用接口与Jersey 1.x进行REST。如何

时间:2014-02-24 13:38:32

标签: java json rest jersey

我使用JERSEY 1.5设计了所需的REST服务,使用声明的接口,如:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public IMyDTO doIt(ICustomer customer) {
    return MySupport.createDTO(customer);
}

如果我尝试使用JERSEY 1.5 Client API调用此服务,则会发生以下错误:

无法构造test.ICustomer实例,问题:抽象类型需要映射到具体类型,具有自定义反序列化器,或者使用其他类型信息进行实例化

目前我通过客户端指定此类参数:

ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, 
                                                               Boolean.TRUE);
Client client = Client.create(clientConfig);
WebResource webResource = client.resource(restResource);
ClientResponse response = webResource.path(restResourcePath)
                    .type(MediaType.APPLICATION_JSON)
                    .accept(MediaType.APPLICATION_JSON)
                    .post(ClientResponse.class, customer);
if (response != null) {
if (response.hasEntity()) {
result = response.getEntity(IMytDTO.class);
}
....

ICustomer IMyDTO java接口,没有任何jackson注释。这些实现也没有jackson注释。

我的问题:如果使用REST服务(客户端),如何(de)序列化对象?

我不会改变java接口并使用服务和客户端的实现......

1 个答案:

答案 0 :(得分:0)

如果您不愿意使用具体类而不是抽象类,我认为您必须创建自定义序列化器和反序列化器。杰克逊的一个例子是:

http://blog.palominolabs.com/2012/06/05/writing-a-custom-jackson-serializer-and-deserializer/