如何解决有没有办法在泛型函数中将列表对象转换为精确的列表类?
我正在 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 类
package com.levitate.projectbe.dto.filter;
import com.levitate.projectbe.dto.common.PopularFiltersDto;
import com.levitate.projectbe.dto.common.TotalBudgetDto;
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;
}
解决方法
一种方法是接受类型引用作为参数,以便调用者可以提供目标类,并且由于 TypeReference
是子类,泛型类型信息将在运行时可用。
public static <D> List<D> convertStringListToObject(String string,TypeReference<List<D>> typeReference) {
if (string == null) return null;
try {
return objectMapper.readValue(string,typeReference);
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
,
您还必须传递要反序列化字符串的类型..
我对此的方法是这样的:
public static <T> T convertStringListToObject(String string,Class<T> clazz) {
if (string == null) {
return null;
}
try {
return objectMapper.readValue(string,clazz);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
然后使用这个方法如下:
List<Model> models =
Arrays.asList(Mapper.convertStringListToObject(stringList,Model[].class));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。