首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Orika映射嵌套子列表

Orika映射嵌套子列表
EN

Stack Overflow用户
提问于 2017-11-09 06:22:43
回答 1查看 879关注 0票数 0

考虑下面的例子。

Group.java(GroupDTO.java也具有相同的属性)

代码语言:javascript
运行
复制
import java.util.List;

public class Group {
    public Group(List<Person> persons) {
        this.persons = persons;
    }

    private List<Person> persons;

    public List<Person> getPersons() {
        return persons;
    }

    public void setPersons(List<Person> persons) {
        this.persons = persons;
    }
}

Person.java(PersonDTO.java也具有相同的属性)

代码语言:javascript
运行
复制
import java.util.List;

public class Person {

    public Person(){}
    public Person(List<Name> names, Integer age) {
        this.names = names;
        this.age = age;
    }

    private List<Name> names;
    private Integer age;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<Name> getNames() {
        return names;
    }

    public void setNames(List<Name> names) {
        this.names = names;
    }
}

Name.java(NameDTO.java也具有相同的属性)

代码语言:javascript
运行
复制
public class Name {
    public Name(String first, String last) {
        this.first = first;
        this.last = last;
    }

    private String first;
    private String last;

    public String getFirst() {
        return first;
    }

    public void setFirst(String first) {
        this.first = first;
    }

    public String getLast() {
        return last;
    }

    public void setLast(String last) {
        this.last = last;
    }
}

当我运行下面的类时,我得到了以下异常。

代码语言:javascript
运行
复制
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import ma.glasnost.orika.metadata.ClassMapBuilder;

import java.util.LinkedList;
import java.util.List;

public class Mapper {

    public static void main(String[] args) {

        List<Name> names = new LinkedList<Name>();
        names.add(new Name("foo", "bar"));
        names.add(new Name("lorem", "ipsum"));
        List<Person> persons = new LinkedList<Person>();
        persons.add(new Person(names, 30));
        persons.add(new Person(names, 40));
        Group g1 = new Group(persons);

        MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
        ClassMapBuilder classMapBuilder = mapperFactory.classMap(Group.class, GroupDTO.class);
        classMapBuilder.field("persons{age}", "persons{age}");
        classMapBuilder.field("persons{names{first}}", "persons{names{first}}");
        classMapBuilder.field("persons{names{last}}", "persons{names{last}}");
        classMapBuilder.byDefault().register();

        MapperFacade mapper = mapperFactory.getMapperFacade();
        GroupDTO groupDTO = mapper.map(g1, GroupDTO.class);

        for(Person p:groupDTO.getPersons()){
            System.out.println(p.getAge());
            for(Name n:p.getNames()){
                System.out.println(n.getFirst());
                System.out.println(n.getFirst());
            }
        }

    }
}

异常

代码语言:javascript
运行
复制
Exception in thread "main" ma.glasnost.orika.MappingException: java.lang.NullPointerException
    at ma.glasnost.orika.impl.generator.MapperGenerator.build(MapperGenerator.java:104)
    at ma.glasnost.orika.impl.DefaultMapperFactory.buildMapper(DefaultMapperFactory.java:1480)
    at ma.glasnost.orika.impl.DefaultMapperFactory.build(DefaultMapperFactory.java:1295)
    at ma.glasnost.orika.impl.DefaultMapperFactory.getMapperFacade(DefaultMapperFactory.java:883)
    at Mapper.main(Mapper.java:28)
Caused by: java.lang.NullPointerException
    at ma.glasnost.orika.impl.generator.specification.MultiOccurrenceToMultiOccurrence.registerClassMaps(MultiOccurrenceToMultiOccurrence.java:397)
    at ma.glasnost.orika.impl.generator.specification.MultiOccurrenceToMultiOccurrence.generateMappingCode(MultiOccurrenceToMultiOccurrence.java:72)
    at ma.glasnost.orika.impl.generator.SourceCodeContext.mapAggregateFields(SourceCodeContext.java:721)
    at ma.glasnost.orika.impl.generator.MapperGenerator.addMapMethod(MapperGenerator.java:182)
    at ma.glasnost.orika.impl.generator.MapperGenerator.build(MapperGenerator.java:70)
    ... 4 more

很抱歉发了这么长的帖子。我尝试从List<>中映射字段,它也在另一个List<>中。最好的方法是什么,还是我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-12-07 20:47:16

如果两端的字段名称相等,则不必注册字段映射,Orika将自行处理。此代码将正确执行映射:

代码语言:javascript
运行
复制
    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
    ClassMapBuilder classMapBuilder = mapperFactory.classMap(Group.class, GroupDTO.class);
    classMapBuilder.byDefault().register();

    MapperFacade mapper = mapperFactory.getMapperFacade();
    GroupDTO groupDTO = mapper.map(g1, GroupDTO.class);

此外,可能只是一个拼写错误,但是来自GroupDTOgetPersons()应该返回PersonDTOgetNames()NameDTO也是如此

代码语言:javascript
运行
复制
   for(PersonDTO p:groupDTO.getPersons()){
        System.out.println(p.getAge());
        for(NameDTO n:p.getNames()){
            System.out.println(n.getFirst());
            System.out.println(n.getLast());
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47190721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档