【问题标题】:How to convert an Object to a custom DTO如何将对象转换为自定义 DTO
【发布时间】:2021-08-19 08:57:37
【问题描述】:

我在尝试将对象列表转换为自定义 DTO 时遇到了一些问题。但是,我发现的所有答案都集中在将实体或 POJ0 转换为 DTO。我怎样才能在某种迭代中做到这一点,甚至在许多情况下访问所有对象属性?

现在我有类似这样的东西会引发一些转换错误,但是如果更改数据类型可行,或者我应该尝试其他方法。

List<Object> ls = myDAO.getSomethingFromDB();
List<MyDTO> ls2 = new ArrayList<MyDTO>();
    for(Object o : ls){
        ls2.add((MyDTO) o);
    }

另外,首先是 StackOverflow 问题,如果我问了一些愚蠢或不好的问题,对不起。

【问题讨论】:

标签: java list object dto


【解决方案1】:

除非myDAO.getSomethingFromDB(); 返回MyDTO 的列表,否则您不能直接将Object 转换为MyDTO

在此处了解有关ClassCastException 的更多信息: https://docs.oracle.com/javase/8/docs/api/java/lang/ClassCastException.html Explanation of ClassCastException in Java

如果您真的想转换为 MyDTO,那么您需要创建新的 MyDTO 对象,然后将值设置为该对象。

【讨论】:

    【解决方案2】:

    可能有很多方法可以做到这一点,这里是使用Java Streams的方法之一:

    List<MyObject> objects = // Get objects from database
    
    List<MyDto> dtos = objects.stream().map(myObj -> {
                MyDto newDto = new MyDto();
    
                // Set your properties here, in this example i'm setting a name and description:
                newDto.setName(myObj.getName());
                newDto.setDescription(myObj.getDescription());
                // Repeat for every property
    
                return newDto;
            })
            .collect(Collectors.toList());
    

    我正在使用map 函数创建一个新的 DTO,它与列表中的对象具有相同的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 2011-01-15
      • 2014-04-17
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      相关资源
      最近更新 更多