【发布时间】:2021-04-23 10:16:14
【问题描述】:
我在 Spring Boot 项目中进行编码,并且有很多 API 具有不同的请求参数,所以我尝试使用映射器将请求参数写入列表对象的通用函数,然后将其转换为类似的类代码如下
public static <D> List<D> convertStringListToObject(String string) {
if (string == null) return null;
try {
return objectMapper.readValue(string, new TypeReference<>() {
});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
但结果是它只能返回一个 Object 列表,而不是我预期的 D 类列表。有没有人知道如何编写这个函数?
编辑: 这是我调用它的方式:
filterBlockRequestDto.setPopularFiltersList(ApiUtil.convertStringListToObject(filterBlockRequestDto.getPopularFilters()));
FilterBlockRequestDto 类
import lombok.*;
import java.util.List;
@Getter
@Setter
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class FilterBlockRequestDto {
Integer locationId;
Integer projectId;
String totalBudget;
List<TotalBudgetDto> totalBudgetList;
// The string was pass in Request param
String popularFilters;
List<PopularFiltersDto> popularFiltersList;
Integer viewRating;
Integer numberOfBed;
}
【问题讨论】:
-
请说明你是如何调用它的。
-
哦:
new TypeReference<>() {}不行。您需要传入一个TypeReference<D>作为参数。 -
@AndyTurner 这是我调用它的方法
filterBlockRequestDto.setPopularFiltersList(ApiUtil.convertStringListToObject(filterBlockRequestDto.getPopularFilters()));。我已经尝试像您之前所说的那样添加,但编译器和 IDE 一直在抱怨,所以我遵循建议,最终结果在函数之上。你可以给我一个传递类型 D 的例子吗?
标签: java spring-boot generics objectmapper