Java jax-rs客户端响应实体通用

问题描述 投票:0回答:1

我对通用函数有疑问。我想使用分配了特定类/类型的函数,以便首先从rest响应中生成相应的结果,然后将其返回。

public class TimerService {

    [...]

    public <T extends myObjInterface> RestMessageContainer<T> send(String endpointPath, Map<String, String> parameters, Class<T> clazz) {
        [...]
        Response response = webTarget.request(MediaType.APPLICATION_JSON_TYPE).get();
        RestMessageContainer<T> container = response.readEntity(new GenericType<RestMessageContainer<T>>() {});
        return container;
    }
}

public class RestMessageContainer<T extends myObjInterface> {

    [...]

    @XmlAttribute(name = "data")
    private List<T> data;

    [...]
}

我在运行时收到以下错误消息。

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct     instance of `com.test.myObjInterface` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
14:47:41,982 ERROR [stderr] (EJB default - 2)  at [Source: (org.jboss.resteasy.client.jaxrs.internal.ClientResponse$InputStreamWrapper); line: 3, column: 14] (through reference chain: com.test.RestMessageContainer["data"]->java.util.ArrayList[0])

错误输出到行RestMessageContainer<T> container = response.readEntity(new GenericType<RestMessageContainer<T>>() {});

我的方法是完全正确的还是应该解决我的问题?

java generics jax-rs
1个回答
0
投票

您无法创建抽象类的实例。但是,您可以通过简单的注释来解决问题–抽象类上的@JsonDeserialize

@@ JsonDeserialize(as = Cat.class)抽象类动物{...}

在您的情况下,抽象类为myObjInterface

注意:如果抽象类有多个子类型,则应考虑包括此post中所示的子类型信息。

© www.soinside.com 2019 - 2024. All rights reserved.