ModelMapper возвращает Null в моих полях Dto при отображении из Entity Object в Dto. Кто-нибудь, пожалуйста, объясните, почему я получаю нулевой ответ - PullRequest
0 голосов
/ 18 апреля 2020

ModelMapper возвращает null в моих полях DTO при отображении из Entity Object в Dto. Кто-нибудь, пожалуйста, объясните, почему я получаю Нулевой ответ.

TestEntity

@Data
@Entity
@Table(name="TestEntity")
public class TestEntity {
    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name="test_name")
    private String test_name;
}

TestEntityDto

@Data
public class TestEntityDto {

    private long id;
    private String test_name;
}

TestService

@Service
public class TestService {

    @Autowired
    TestEntityRepo testEntityRepo;

    public TestEntityDto getAllTestList() {
        List<TestEntity> testEntity= testEntityRepo.findAll();
        ModelMapper mapper = new ModelMapper();
        TestEntityDto testEntityDto = mapper.map(TestEntity.class, TestEntityDto.class);

        return  testEntityDto;
    }
}

Фактический результат:

{
   "id": 0,
   "test_name": null
}

Ожидаемый результат:

{
   "id": 1,
   "test_name": "Test"
}

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Вы пытаетесь сопоставить List<TestEntity> с TestEntityDto, что неверно. Попробуйте составить карту для каждого TestEntity с помощью ModelMapper и составить список TestEntityDto.

public List<TestEntityDto> getAllTestList() {

    List<TestEntity> testEntity= testEntityRepo.findAll();
    List<TestEntityDto> testEntityDtos = new ArrayList<TestEntityDto>();
    ModelMapper mapper = new ModelMapper();
    mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
    for(TestEntity perTestEntity :testEntity){
        TestEntityDto testEntityDto = mapper.map(perTestEntity , TestEntityDto.class);
         testEntityDtos.add(testEntityDto);
    }
    return  testEntityDtos;

}
0 голосов
/ 18 апреля 2020

Вы используете private String test_name; в классе, но в dto нет поля с именем test_name.

Используйте private String testName; в TestEntity классе.

Или

Используйте private String test_name; в TestEntityDto классе.

Обновите используйте STRICT сопоставление и используйте testEntity для источника.

ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
TestEntityDto testEntityDto = mapper.map(testEntity, TestEntityDto.class);
...