首页 > 解决方案 > 列表显示其先例值

问题描述

所以我使用模型映射器来转换我所有的实体,直到现在都很好。我有一个实体 TaskDTO,其属性中有一个 Double 列表。我可以恢复这个列表,但是一旦提出请求,所有下一个请求都会给我相同的列表。

这是我的转换器的部分:

public static TaskDTO converTaskToDTO(Task source) {
    List<Double> icList = new ArrayList<>();
    for (ChargeInitial c : source.getCharge()) {
        icList.add(c.getCharge());
    }
    System.out.println(icList);
    TypeMap<Task, TaskDTO> typeMap = modelMapper.getTypeMap(Task.class, TaskDTO.class);
    if (typeMap == null) {

        modelMapper.addMappings(new PropertyMap<Task, TaskDTO>() {
            @Override
            protected void configure() {
                map().setLot(source.getLot().getName());
                map().setProject(source.getLot().getProject().getName());
                map().setCollaborator(source.getCollaborator().getEmail());
                map().setCharge(icList);

            }
        });
    }

    return modelMapper.map(source, TaskDTO.class);

}

但是 sysout 会为我打印正确的列表。

例如,如果在第一个请求中我得到了该列表的费用 [1,2],那么即使我得到了正确的结果,即 [1,2,3, 4,5] 在我的 system.out 中。

可能是什么问题呢?

编辑

我将TaskDTO中的setCharge方法更改如下,效果很好。

public void setCharge(List<ChargeInitial> charge) {
    List<Double> list = new ArrayList<>();
    for (ChargeInitial c : charge) {
        list.add(c.getCharge());
    }
    this.charge=list;
}

标签: javaspring-bootmodelmapper

解决方案


您可以使用Converter,List<ChargeInitial>List<Double>

public static TaskDTO converTaskToDTO(Task source) {

    TypeMap<Task, TaskDTO> typeMap = modelMapper.getTypeMap(Task.class, TaskDTO.class);
    if (typeMap == null) {

        PropertyMap<Task, TaskDTO> mapping = new PropertyMap<Task, TaskDTO>() {
            @Override
            protected void configure() {
                map().setLot(source.getLot().getName());
                map().setProject(source.getLot().getProject().getName());
                map().setCollaborator(source.getCollaborator().getEmail());
            }
        };
        modelMapper.addMappings(mapping);

        Converter<List<ChargeInitial>, List<Double>> chargeInitialConverter = new AbstractConverter<>() {
            @Override
            protected List<Double> convert(List<ChargeInitial> source) {
                List<Double> icList = new ArrayList<>();
                for (ChargeInitial c : source) {
                    icList.add(c.getCharge());
                }
                System.out.println(icList);
                return icList;
            }
        };
        modelMapper.addConverter(chargeInitialConverter);

    }

    return modelMapper.map(source, TaskDTO.class);

}

推荐阅读