java dto 生成_java – 从多个源DTO映射到一个目标
使用MapStruct.举个例子:
class Dto {
DtoA a;
DtoB b;
}
class DtoA {
Long id;
//...
}
class DtoB {
Long id;
//...
}
class Entity {
AB ab;
}
如何将DtoA和DtoB映射到AB?
我试过了:
public abstract Entity toEntity(Dto dto);
@Mappings({
@Mapping(source = "a", target = "ab.a"),
@Mapping(source = "b", target = "ab.b")
)}
public abstract AB toABEntity(DtoA a, DtoB b);
已生成Altough代码*,未调用方法toABEntity.
*糟糕的是,因为它首先设置“a”但是然后设置“b”会创建一个新的“ab”实例,因此“a”会丢失.
最佳答案 据我了解你想要将实体映射到Dto并将两个字段Dto.a和Dto.b组合到单个字段Entity.ab中.
通常当你尝试这样做时:
@Mapper
public interface TestMapper {
@Mappings({
@Mapping(source = "a.id", target = "ab.aId", qualifiedByName = "toAB"),
@Mapping(source = "b.id", target = "ab.bId", qualifiedByName = "toAB"),
})
Entity toEntity(Dto dto);
}
对于在ab内具有目标属性的每个@Mapping,生成的映射器覆盖ab实例.这显然是一个错误,并且在MapStructs GitHub上有一张票:https://github.com/mapstruct/mapstruct/issues/1148
但有一个解决方法:
@Mapper
public interface TestMapper {
@Mappings({
@Mapping(source = "dto", target = "ab", qualifiedByName = "toAB"),
})
Entity toEntity(Dto dto);
@Mappings({
@Mapping(target = "aId", source = "a.id"),
@Mapping(target = "bId", source = "b.id"),
})
AB toAB(Dto dto);
}
我认为AB类是:
class AB {
public Long aId;
public Long bId;
}
生成的映射器代码:
public class TestMapperImpl implements TestMapper {
@Override
public Entity toEntity(Dto dto) {
if ( dto == null ) {
return null;
}
Entity entity = new Entity();
entity.ab = toAB( dto );
return entity;
}
@Override
public AB toAB(Dto dto) {
if ( dto == null ) {
return null;
}
AB aB = new AB();
Long id = dtoBId( dto );
if ( id != null ) {
aB.bId = id;
}
Long id1 = dtoAId( dto );
if ( id1 != null ) {
aB.aId = id1;
}
return aB;
}
private Long dtoBId(Dto dto) {
if ( dto == null ) {
return null;
}
DtoB b = dto.b;
if ( b == null ) {
return null;
}
Long id = b.id;
if ( id == null ) {
return null;
}
return id;
}
private Long dtoAId(Dto dto) {
if ( dto == null ) {
return null;
}
DtoA a = dto.a;
if ( a == null ) {
return null;
}
Long id = a.id;
if ( id == null ) {
return null;
}
return id;
}
}
java dto 生成_java – 从多个源DTO映射到一个目标相关推荐
- Java随机生成Mac地址(GitHub源码下载)
生成随机 Mac 地址 这段时间做项目,涉及到虚拟机 Mac 地址生成,网上找了一些 Java 随机生成 Mac 地址的代码,大多都是从 {'0', '1', '2', '3', '4', '5', ...
- java excel生成_java操作excel表,包括创建、读取、以及修改【via 度娘】
作者的网站上对它的特征有如下描述: ● 支持Excel 95-2000的所有版本 ● 生成Excel 2000标准格式 ● 支持字体.数字.日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说 ...
- java 日志 生成_Java日志(转)
日志对于一个系统来说非常重要,查找异常信息.分析系统运行情况等都需要用到日志.所以无论是JDK还是第三方都提供了关于日志的相关工具,本文分别介绍以下几种工具,以及各种工具间的整合.原理. JDK的ja ...
- java捕鱼达人_java捕鱼达人游戏(源码)
[实例简介] java做的捕鱼游戏,有兴趣的小伙伴们可以看看了,源码非常详细. [实例截图] [核心代码] FishGame └── FishGame ├── bg │ ├── fishlight ...
- java 兑换码生成_java兑换码生成
转自csin package com.test; import java.util.Random; public class RedeemCodeUtils { public static void ...
- java word生成_JAVA生成WORD工具类
该方法借助freemarker的JAR包即可. 参考: 所需工具: 步骤: 1.在word中编辑好模版样式,设置好占位符,注意图片最好先黏上去 2.在word中,文件-另存为-XML格式 3.使用工具 ...
- asmx+java客户端生成_java 调用webservice (asmx) 客户端开发示例
这是本人第一次写博客,其实就是自己做个笔记,写的很粗糙,也希望能给跟我遇到同样问题的你一点帮助. 因为最近有个项目要调用webservice接口,之前接触的都是Java开发服务端和客户端的接口,开发前 ...
- java bean生成_Java Bean 生成器
这是一个java bean生成器,利用一个文本文件(不妨称为bean定义文件)生成java bean. 开发过程中我们可能会用到很多数据对象(值对象),大都被封装成一个bean.虽然各大 IDE都提供 ...
- java 兑换码生成_java生成兑换码礼包码--工具类
importjava.util.HashSet;importjava.util.Random;importjava.util.Set;public classGenSerial {private st ...
- java酒店管理系统_java酒店管理系统(源码+数据库脚本)
[实例简介]一个很基础的Java实例,实现最基础的增删改查 [实例截图] 账号:01101 密码:1234 [核心代码] package com.sqc.view; import java.awt. ...
最新文章
- 连表/子查询/计算的sql
- Bossy智能便贴:让工作更有效率
- 红帽RHEL6.8离线环境下升级到RHEL7.3
- Star 10.9K!这份Google面试攻略,牛逼了!
- 判断一个字符串是否是数值
- FreeSql (二十一)查询返回数据
- 博客系统。集成调试平台,支持类结构/jar结构预览、支持方法调试和监听、支持修改类字段(变量、常量、枚举)等
- xgboost的原理没你想像的那么难
- [SHELL进阶] (转)最牛B的 Linux Shell 命令 (三)
- Python 实用技巧
- 一款好看的 VSCode 代码主题和图标主题
- python实现ORC/文字识别之pytesseract
- 已会背诵英文文章 How To Boost Your Confidence
- 中国魔芋胶行业研究与投资前景预测报告(2022版)
- Linux 命令(159)—— hostname 命令
- CF1637E Best Pair
- HDU oj wod sticks
- C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
- Flutter33,Android移动开发基础
- sql server 2000安装程序配置服务器失败