Dozer: org.dozer.MappingProcessor: ошибка отображения поля - PullRequest
0 голосов
/ 28 марта 2020

Я просто использовал аннотацию dozer v для отображения между классами и DTO. у меня есть некоторые отношения oneToMany и ManyToOne, тогда, когда я пытаюсь получить список клиентов после добавления команды к клиенту, я думаю, что поле команды отображается неправильно в классе клиента, я получаю следующую ошибку:

    2020-03-28 16:34:48.507 ERROR 12768 --- [nio-8080-exec-8] org.dozer.MappingProcessor               : Field mapping error -->
      MapId: null
      Type: null
      Source parent class: com.mojacko.myProjectdozer.domain.Command
      Source field name: customer
      Source field type: class com.mojacko.myProjectdozer.domain.Customer
      Source field value: com.mojacko.myProjectdozer.domain.Customer@1aa18f29
      Dest parent class: com.mojacko.myProjectdozer.dto.CommandDto
      Dest field name: customer
      Dest field type: com.mojacko.myProjectdozer.dto.CustomerDto
java.lang.IllegalArgumentException: Can not set com.mojacko.myProjectdozer.dto.CustomerDto field com.mojacko.myProjectdozer.dto.CommandDto.customer to com.mojacko.myProjectdozer.dto.CustomerDto
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) ~[na:1.8.0_151]
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) ~[na:1.8.0_151]
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) ~[na:1.8.0_151]
    at java.lang.reflect.Field.set(Field.java:764) ~[na:1.8.0_151]
    at org.dozer.propertydescriptor.FieldPropertyDescriptor$ChainedPropertyDescriptor.setPropertyValue(FieldPropertyDescriptor.java:143) ~[dozer-5.5.1.jar:na]
    at org.dozer.propertydescriptor.FieldPropertyDescriptor.setPropertyValue(FieldPropertyDescriptor.java:90) ~[dozer-5.5.1.jar:na]
    at org.dozer.fieldmap.FieldMap.writeDestValue(FieldMap.java:96) ~[dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.writeDestinationValue(MappingProcessor.java:939) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:368) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapField(MappingProcessor.java:307) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.map(MappingProcessor.java:267) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapToDestObject(MappingProcessor.java:216) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.createByCreationDirectiveAndMap(MappingProcessor.java:196) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:512) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:465) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.addToSet(MappingProcessor.java:757) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapCollection(MappingProcessor.java:570) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:453) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:361) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapField(MappingProcessor.java:307) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.map(MappingProcessor.java:267) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapToDestObject(MappingProcessor.java:216) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.createByCreationDirectiveAndMap(MappingProcessor.java:196) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.mapGeneral(MappingProcessor.java:170) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.map(MappingProcessor.java:104) [dozer-5.5.1.jar:na]
    at org.dozer.MappingProcessor.map(MappingProcessor.java:99) [dozer-5.5.1.jar:na]
    at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:120) [dozer-5.5.1.jar:na]
    at com.mojacko.myProjectdozer.service.dozerMapper.CustomerMapper.mapListObjecttoListObjectDto(CustomerMapper.java:34) [classes/:na]
    at com.mojacko.myProjectdozer.service.CustomerServiceImp.findAll(CustomerServiceImp.java:33) [classes/:na]

это часть моего кода: мои классы

    @Setter
    @Getter
    @Entity
    @AllArgsConstructor
    @NoArgsConstructor
    public class Command implements Serializable {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        @Mapping("commandNumber")
        private String commandNumber;
        @Mapping("commandName")
        private String commandName;
        @Mapping("commandType")
        private String commandType;
        @Mapping("customer")
        @ManyToOne
        @JoinColumn(name = "customer_id")
        private Customer customer;


    }
--------------------

@Setter
@Getter
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Customer implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Mapping("id")
    private Long id;
    @Mapping("firstName")
    private String firstName;
    @Mapping("lastName")
    private String lastName;
    @Mapping("phoneNumber")
    private String phoneNumber;
    @Mapping("address")
    private String address;

    @Mapping("commands")
    @OneToMany(mappedBy = "customer" ,fetch = FetchType.LAZY)
    private Set<Command> commands;
}

классы DTO

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class CommandDto {

    private Long id;
    private String commandNumber;
    private String commandName;
    private String commandType;
    private CustomerDto customer;
}
--------------------

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class CustomerDto {

    private Long id;
    private String firstName;
    private String lastName;
    private String phoneNumber;
    private String address;
    private Set<CommandDto> commands;

}

класс DozerMapper:

@Component
public class CommandMapper {
    Mapper mapper = new DozerBeanMapper();

    public Command toEntity(CommandDto commandDto) {
        return mapper.map(commandDto, Command.class);
    }

    public CommandDto toDto(Command command) {
        return mapper.map(command, CommandDto.class);
    }

    public List<Command> mapListObjectDTOtoListObject(List<CommandDto> commandDtos) {
        List<Command> commands = new ArrayList<>();
        for (CommandDto commandDto : commandDtos) {
            commands.add(mapper.map(commandDto,Command.class));
        }
        return commands;
    }
    public List<CommandDto> mapListObjecttoListObjectDto(List<Command> commands) {
        List<CommandDto> commandDtos = new ArrayList<>();
        for (Command command : commands) {
            commandDtos.add(mapper.map(command,CommandDto.class));
        }
        return commandDtos;
    }

}

------------

@Component
public class CustomerMapper {
    Mapper mapper = new DozerBeanMapper();

    public Customer toEntity(CustomerDto customerDto) {
        return mapper.map(customerDto, Customer.class);
    }

    public CustomerDto toDto(Customer customer) {
        return mapper.map(customer, CustomerDto.class);
    }

    public List<Customer> mapListObjectDTOtoListObject(List<CustomerDto> customerDtos) {
        List<Customer> customers = new ArrayList<>();
        for (CustomerDto customerDto : customerDtos) {
            customers.add(mapper.map(customerDto,Customer.class));
        }
        return customers;
    }
    public List<CustomerDto> mapListObjecttoListObjectDto(List<Customer> customers) {
        List<CustomerDto> customersDtos = new ArrayList<>();
        for (Customer customer : customers) {
            customersDtos.add(mapper.map(customer,CustomerDto.class));
        }
        return customersDtos;
    }

}

Есть идеи?

...