java—有没有一种方法可以在泛型函数中将list对象强制转换为精确的list类?

vql8enpb  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(657)

我在一个spring boot项目中编写代码,有很多api使用不同的request param,所以我尝试用mapper将一个request param编写一个泛型函数到一个list对象中,然后将它转换成一个类,如下面的代码所示

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类列表。有人知道怎么写这个函数吗?
eddited:我是这样调用它的:

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;
}
x6h2sr28

x6h2sr281#

一种方法是接受类型引用作为参数,以便调用者可以提供目标类和作为参数 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;
    }
h7appiyu

h7appiyu2#

您还必须将要反序列化字符串的类型传递给。。
我的方法是这样的:

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));

相关问题