有没有可能将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
,分配给泛型的类型将丢失。
暂无答案!
目前还没有任何答案,快来回答吧!