我正在尝试构建一个返回通用对象列表的查询。
这是我的基础对象:
@Getter
@Setter
@EqualsAndHashCode(of = {"id"})
public class Normalized {
public static final String J_ID = "id";
public static final String J_CREATED_AT = "createdAt";
public static final String J_UPDATED_AT = "udpatedAt";
@Id
@Indexed
@JsonProperty(J_ID)
private String id;
@JsonProperty(J_CREATED_AT)
private Instant createdAt;
@JsonProperty(J_UPDATED_AT)
private Instant updatedAt;
}
这是我的域对象:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@Document
public class NormalizedContent<E extends OriginalContent> extends Normalized {
public static final String J_SOURCE = "source";
public static final String J_EXTERNAL_URL = "externalUrl";
public static final String J_MAIN_TEXT = "mainText";
public static final String J_ORIGINAL_CONTENT = "originalContent";
public static final String J_CREATED_DATE = "createdDate";
@Indexed
@JsonProperty(J_SOURCE)
private Sources source;
@Indexed
@JsonProperty(J_CREATED_DATE)
private Instant createdDate;
@JsonProperty(J_EXTERNAL_URL)
private String externalUrl;
@JsonProperty(J_MAIN_TEXT)
private String mainText;
@JsonProperty(J_ORIGINAL_CONTENT)
private E originalContent;
}
这是我的功能的简化:
public Page<NormalizedContent<? extends OriginalContent>> findAllByQueriesAndFilters(
List<String> queriesId, Pageable pageable) {
if (queriesId == null || queriesId.isEmpty()) {
throw new IllegalArgumentException("Queries unspecified");
}
Criteria criteria = Criteria.where(NormalizedContent.J_QUERY).in(queriesId);
Query query = new Query(criteria);
query.with(pageable);
List<NormalizedContent<? extends OriginalContent>> content =
mongoTemplate.find(query, NormalizedContent.class);
Long total = mongoTemplate.count(query, OTBUserpanelUser.class);
return new PageImpl<NormalizedContent<? extends OriginalContent>>(content, pageable, total);
}
问题在于:
List<NormalizedContent<? extends OriginalContent>> content =
mongoTemplate.find(query, NormalizedContent.class);
因为内容变量是NormalizedContent<? extends OriginalContent>
的列表find 方法返回 NormalizedContent
的列表.
我该怎么做才能让 find 方法返回 NormalizedContent<? extends OriginalContent>
的列表?
最佳答案
List<NormalizedContent> content =
mongoTemplate.find(query, NormalizedContent.class);
从内容中退休标准化内容时,转换为包含 <? extends OriginalContent>
的属性类型。
关于Java Spring,使用 MongoTemplate 和泛型类型查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45051014/