mapstruct集合转换: No property named “xxx“ exists in source parameter(s). Did you mean “coursewareName“?

电玩女神 2023-10-10 20:10 165阅读 0赞

例如我们想要转换以下集合,并且做了对应的字段映射,但是最终不起作用。

  1. @Mappings({
  2. @Mapping(source = "coursewareName", target = "name")
  3. })
  4. Page<HrefVo> dcConvertToHrefVo(Page<DigitalCoursewareSearchRespVo> digitalCoursewareSearchRespVoPage);

我们查看mapstruct为我们生成的代码可以看到:

  1. @Override
  2. public Page<HrefVo> dcConvertToHrefVo(Page<DigitalCoursewareSearchRespVo> digitalCoursewareSearchRespVoPage) {
  3. if ( digitalCoursewareSearchRespVoPage == null ) {
  4. return null;
  5. }
  6. Page<HrefVo> page = new Page<HrefVo>();
  7. page.setPages( digitalCoursewareSearchRespVoPage.getPages() );
  8. page.setRecords( digitalCoursewareSearchRespVoListToHrefVoList( digitalCoursewareSearchRespVoPage.getRecords() ) );
  9. page.setTotal( digitalCoursewareSearchRespVoPage.getTotal() );
  10. page.setSize( digitalCoursewareSearchRespVoPage.getSize() );
  11. page.setCurrent( digitalCoursewareSearchRespVoPage.getCurrent() );
  12. page.setSearchCount( digitalCoursewareSearchRespVoPage.isSearchCount() );
  13. page.setOptimizeCountSql( digitalCoursewareSearchRespVoPage.isOptimizeCountSql() );
  14. List<OrderItem> list1 = digitalCoursewareSearchRespVoPage.getOrders();
  15. if ( list1 != null ) {
  16. page.setOrders( new ArrayList<OrderItem>( list1 ) );
  17. }
  18. page.setCountId( digitalCoursewareSearchRespVoPage.getCountId() );
  19. page.setMaxLimit( digitalCoursewareSearchRespVoPage.getMaxLimit() );
  20. return page;
  21. }

其中digitalCoursewareSearchRespVoListToHrefVoList方法是我数据的转换分页集合方法,接着点击可以看到,集合的转换实际上最终就是单个对象的转换,所以我们的Mapping映射加在单个对象的转换上就可以了,无需加在集合上!!!

  1. protected List<HrefVo> digitalCoursewareSearchRespVoListToHrefVoList(List<DigitalCoursewareSearchRespVo> list) {
  2. if ( list == null ) {
  3. return null;
  4. }
  5. List<HrefVo> list1 = new ArrayList<HrefVo>( list.size() );
  6. for ( DigitalCoursewareSearchRespVo digitalCoursewareSearchRespVo : list ) {
  7. list1.add( dcConvert( digitalCoursewareSearchRespVo ) );
  8. }
  9. return list1;
  10. }

改为如下代码,即可将集合的映射成功了:

  1. @Mappings({
  2. @Mapping(source = "coursewareName", target = "name")
  3. })
  4. HrefVo dcConvert(DigitalCoursewareSearchRespVo digitalCoursewareSearchRespVo);
  5. Page<HrefVo> dcConvertToHrefVo(Page<DigitalCoursewareSearchRespVo> digitalCoursewareSearchRespVoPage);

发表评论

表情:
评论列表 (有 0 条评论,165人围观)

还没有评论,来说两句吧...

相关阅读