restemplate参数化typereference

euoag5mw  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(281)

有没有可能将ParameterizeTypeReference与使用泛型和jackson的泛型的类一起使用 @Jacksonized ?
我的 ParameterizedTypeReference<QueryResult<User>> 投掷
java.lang.classcastexception:类java.util.linkedhashmap不能强制转换为类rally.models.user(java.util.linkedhashmap位于加载程序“bootstrap”的模块java.base中);lally.models.user位于加载器“app”的未命名模块中)
我的模板调用:

// define my "type"
ParameterizedTypeReference<QueryResult<User>> type =
                new ParameterizedTypeReference<>() { };
// call some shitty API that returns terrible JSON responses....like Rally
ResponseEntity<QueryResult<User>> response =
                template.exchange(<url string>, HttpMethod.GET, null, type);

我的 QueryResult 注意“results”列表是一个泛型类型

@Slf4j
@Getter
@ToString
@Jacksonized
@Builder
public class QueryResult<R> {
    @JsonProperty("TotalResultCount")
    private final int resultCount;

    @JsonProperty("StartIndex")
    private final int page;

    @JsonProperty("PageSize")
    private final int pageSize;

    @JsonProperty("Results")
    private final List<R> results;
}

基本上…只要你“查询”rally api,你就会得到一个标准的负载。有效负载中的一项是“结果”数组。每个结果类型都有pojo,并在queryresult对象中使用泛型。
似乎在运行时, R 未知,jackson默认为linkedhashmap,而不是 User . 我如何提示jackson知道使用哪种类型? R 不会永远是一个 User ……可能是 Project 或者 Tag .
更新#1
看来我的问题更多的是 @Builder 以及 @Jacksonized . 当我换衣服的时候 User 要使用的pojo @Data ,它的工作原理是:

@Slf4j
@Data
public class QueryResult<R> {
    @JsonProperty("TotalResultCount")
    private final int resultCount;

    @JsonProperty("StartIndex")
    private final int page;

    @JsonProperty("PageSize")
    private final int pageSize;

    @JsonProperty("Results")
    private final List<R> results;
}

我猜在使用 @Builder ,分配给泛型的类型将丢失。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题