当前位置: 首页 > 知识库问答 >
问题:

Orika列表中没有空元素的映射

汲丰茂
2023-03-14

我有以下课程:

public class A{
    List<AA> aaList;

    public A(List<AA> aaList){
        this.aaList = aaList;
    }

    //getters and setters + default constructor

    public class AA {
        String aaString;
        public AA(String aaString){
            this.aaString = aaString;
        }

        //getters and setters + default constructor
    }
}

我想要两个同一类的对象,比方说:

A a = new A(Arrays.asList(new A.AA(null)));
A a2 = new A(Arrays.asList(new A.AA("test")));

当我把a映射到a2时,a2应该保持test,因为a有一个null

如何使用Orika

我试过这样的方法:

mapperFactory.classMap(A.AA.class, A.AA.class)
            .mapNulls(false)
            .byDefault()
            .register();

    mapperFactory.classMap(A.class, A.class)
            .mapNulls(false)
            .customize(new CustomMapper<A, A>() {
                @Override public void mapAtoB(A a, A a2,
                        MappingContext context) {
                    map(a.getAAList(), a2.getAAList());
                }
            })
            .byDefault()
            .register();

提前谢谢

共有1个答案

唐高卓
2023-03-14

下面是一个修改过的代码片段,对我很有效:

mapperFactory.classMap(A.class, A.class)
    .mapNulls(false)
    .customize(new CustomMapper<A, A>() {
        @Override
        public void mapAtoB(A a, A a2, MappingContext context) {
            // 1. Returns new list with not null
            List<A.AA> a1List = a.getAaList().stream()
                    .filter(a1 -> a1.getAaString() != null)
                    .collect(Collectors.toList());

            // 2. Merges all the elements from 'a2' list into 'a' list
            a1List.addAll(a2.getAaList());

            // 3. Sets the list with merged elements into the 'a2'
            a2.setAaList(a1List);
        }
    })
    .register();

请注意,。默认情况下,应删除(),以便自定义映射器正常工作。

 类似资料:
  • 考虑2个对象: 与orika-mapper: 然后以下测试失败: 这是因为已成为空数组列表。为什么会这样?另一件非常值得注意的事情是:如果我用内容填充这两个列表,映射甚至会发生!虽然它们是不同类型的! 就是 与 和 成功。人们能指望这一点吗?这安全吗?

  • 我有一个对象带有字段

  • 假设我有一个由n个字符串列表组成的列表: result->包含所有输出列表(所有组合) current->是当前的组合 用上述相同示例调用此函数时的输出:

  • 鉴于 和 如何在Orika中映射以下内容? 我需要定制的映射器或过滤器吗?

  • 问题内容: 有人告诉我 编写一个函数square(a),该函数接受一个数字数组a并返回一个包含每个平方值的数组。 起初,我有 但是,由于我正在打印,而且没有像被问到的那样返回,因此这不起作用。所以我尝试了 但这仅平方我数组的最后一个数字。我如何才能使整个列表平方? 问题答案: 您可以使用列表理解: 或者您可以: 或者,您可以使用发电机。它不会返回列表,但是您仍然可以迭代它,并且由于不必分配整个新列

  • 我正在使用Jackson 2.4将对象序列化为JSON。 当我序列化对象列表时,如果某些元素为空,则结果字符串包含一些“空”字符串。 如何防止元素被序列化?是否有任何配置?我已经设置了! 下面是我的代码: 连载之后我得到了这个: