使用转换器和提供程序而不是属性映射时如何让 ModelMapper.validate() 成功?

2024-03-12

有类似的东西:

@Getter @Setter
public static class Entity {
    private int hash;
    private LocalDateTime createdTime;
}

and

@Getter @Setter
public static class DTO {
    private String hash;
    private String createdTime;
}

我需要双向映射,所以我应该能够映射实体 -> DTO -> 实体。在此示例中,属性类型恰好是LocalDateTime但可以是任何需要解析的类型String左右(只是说我不追求更好的方式来映射LocalDateTime但一般而言)。

映射时没有问题。我创造TypeMap, add Converter并为LocalDateTime a Provider还因为它确实注意到有公共默认构造函数。就像是here https://stackoverflow.com/q/39454492/6413377.

如果我的 DTO 中也有LocalDateTime createdTime(or String createdTime in my Entity) then ModelMapper.validate()会很高兴。但我没有,我需要创建所有转换的东西。

这一切导致ModelMapper.validate()抱怨:

Unmapped destination properties found in TypeMap[DTO -> Entity]:  
    org.example.test.modelmapper.validation.TestIt$Entity.setCreatedTime()

我目前用于验证映射的代码LocalDateTime案例是:

ModelMapper mm = new ModelMapper();
mm.createTypeMap(Entity.class, DTO.class);
mm.createTypeMap(DTO.class, Entity.class);
mm.createTypeMap(String.class, LocalDateTime.class)
        .setPropertyProvider(localDateTimeProvider);
mm.addConverter(toStringDate);
mm.validate();

(所以我没有做任何实际的映射,而是验证映射)

with

Provider<LocalDateTime> localDateTimeProvider =
        new AbstractProvider<LocalDateTime>() {
    @Override
    public LocalDateTime get() {
        return LocalDateTime.now();
    }
};

and

Converter<String, LocalDateTime> toStringDate = new AbstractConverter<>() {
    @Override
    protected LocalDateTime convert(String source) {
        return LocalDateTime.parse(source);
    }
};

询问更多详细信息/代码。我会根据需要更新问题


The setPropertyProvider方法允许指定一个 Provider 用于提供 TypeMap 中映射属性的实例。

所以当你写:

mm.createTypeMap(String.class, LocalDateTime.class)
        .setPropertyProvider(localDateTimeProvider);

它不适合这种情况,因为我们在将 String 类型的属性映射到 LocalDateTime 类型的属性时没有使用此提供程序。它应该被移到上面以与DTO -> 实体TypeMap(顺便说一句,错误消息是对此的一个很好的提示)。所以应该是这样。

mm.createTypeMap(DTO.class, Entity.class)
                .setPropertyProvider(localDateTimeProvider);

这是非常有意义的,因为我们使用提供程序来提供 DTO 的 String 属性映射的实例(String createdTime;) 到实体的 LocalDateTime 属性 (LocalDateTime createdTime;).

另一方面,转换器应在相应的提供程序之前添加到 ModelMapper。

也离开在mm.createTypeMap(String.class, LocalDateTime.class),我的编译器抱怨类似的类型映射已经存在,无需创建新的类型映射。这样我就可以放弃它了。

通过这两个更改,我的 bean 看起来像:

@Bean
ModelMapper demoModelMapper() {

   Provider<LocalDateTime> localDateTimeProvider =
   new AbstractProvider<LocalDateTime>() {
      @Override
      public LocalDateTime get() {
         return LocalDateTime.now();
      }
   };

   Converter<String, LocalDateTime> toStringDate = new AbstractConverter<String, 
   LocalDateTime>() {
      @Override
      protected LocalDateTime convert(String source) {
         return LocalDateTime.parse(source);
      }
   };

   ModelMapper mm = new ModelMapper();


   mm.createTypeMap(Entity.class, DTO.class);
   mm.addConverter(toStringDate);
   mm.createTypeMap(DTO.class, Entity.class)
     .setPropertyProvider(localDateTimeProvider);
   mm.validate();

   return mm;
}

请注意我正在打电话证实()在归还豆子之前。这对我有用。请您测试看看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用转换器和提供程序而不是属性映射时如何让 ModelMapper.validate() 成功? 的相关文章

  • 使用比较器对对象进行排序给出空指针

    我正在尝试对包含 3 张卡的 ArrayList 进行排序 我正在用比较器来做这件事 这是否太过分了 Card getRank 返回 2 到 14 之间的整数 我完全不知道哪里出了问题 我之前已经成功完成了这个 并与我的其他代码进行了比较
  • Hibernate 自定义架构创建

  • eclipse juno 打开时出错

    在安装 Eclipse 并正常工作一年多后 我今天打开 Eclipse Juno 并在打开工作区时收到一条错误消息 我使用的是 Windows 8 64 位 Java 64 位和 Eclipse 64 位 此后我尝试重新安装 Java 和
  • Java 弱哈希映射 - 需要根据值的弱点而不是键来删除条目

    所以JavaWeakHashMap让我们创建一个映射 如果其键变弱 则删除该映射的条目 但是我怎样才能创建一个Map 当它的条目被删除时values地图上变弱了 我想使用映射的原因是作为全局哈希表 它根据对象的 ID 跟踪对象 ID gt
  • 如何使用 Spring Security 跨多个基于 JVM 的应用程序实现单点登录

    我目前正在尝试跨多个基于 JVM Grails Servlet 的 Web 应用程序实现单点登录解决方案 这些应用程序目前都部署在同一个 servlet 容器 当前是 Tomcat 但不想将我的解决方案仅限于 Tomcat 中 所有 Web
  • PrintStream是有缓冲的,但是flush不会降低性能,而BufferedOutputStream会加速性能

    我预计由于 PrintStream 是缓冲的 通过在每次 print 之后添加刷新操作 速度性能应该会显着降低 但事实并非如此 如下面的代码片段所示 此外 将 PrintStream 包裹在 BufferedOutputStream 周围可
  • 将二进制数据的 byte[] 转换为 String

    我有二进制格式的数据 hex 80 3b c8 87 0a 89 我需要将其转换为字符串 以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中 我知道 我不打算在 Java 中使用 String 来存储二进制数据 但
  • (Java) 在 Mac OS X 上以编程方式访问“系统根目录”下的 SSL 证书

    我正在编写一个 Java 应用程序 它可以通过远程 Https 站点进行 REST Api 调用 远程站点由受信任的证书签名 它在 Windows 上运行良好 但由于 SSL 证书问题 在 OS X 上运行时遇到问题 我做了一些挖掘 发现原
  • Java - 同步方法导致程序大幅减慢

    我正在尝试了解线程和同步 我做了这个测试程序 public class Test static List
  • 获取证书链

    我正在 Java 中使用 X509 证书 给定一个证书 是否可以在签名层次结构中找到所有其他证书 直到找到根证书 我有一个证书文件 带有 cer扩展名 我想提取父签名证书 我想继续查找该证书的父证书 直到获得最终的自签名根证书 我已经检查了
  • 如何在Webview中保存用户名和密码

    目前 我还在学习Android开发的过程中 所以如果我的这个问题对你来说不太容易理解 请原谅 我创建了一个 Android 应用程序 它使用 RecyclerView 显示一组列表 当用户单击列表中的每个名称时 它会将它们重定向到一组不同的
  • HashSet 与 LinkedHashSet

    它们之间有什么区别 我知道 LinkedHashSet 是 HashSet 的有序版本 维护一个跨所有元素的双向链接列表 使用此类代替 HashSet 当您关心迭代顺序时 当你迭代 HashSet 时 顺序是不可预测的 而 LinkedHa
  • 线程睡眠阻止我的 Swing 应用程序执行

    我的应用程序发生的事情是有道理的 但我不知道如何修复它 以下是我的应用程序功能的简要描述 计时器窗口应显示在屏幕右下角并显示实时时间 一小时后 它应该执行一些操作 我还没有决定该操作 我面临的问题是定时器 java当我刷新实时计时器的秒数时
  • 有时 Properties.load() 会跳过行

    在以下情况下 Properties load 会跳过 InputStream 的第二行 这是 Java 的错误还是正常行为 public class PropTest public static void main String args
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • 在 Java 服务器中验证 Windows 用户

    我正在开发一个用 Java 编写的服务器和一个在同一网络上的 Windows 计算机上运行的客户端 用 Net 编写的桌面应用程序 我希望进行一些基本身份验证 以便服务器可以确定运行客户端的用户的用户名 而不需要用户在客户端中重新输入其 W
  • 如何确保超类的子类方法的线程安全?

    我参加了一次面试 并被要求为以下要求设计一个课程 假设我有一个 A 类 它可以有任意数量的子类 即子类 类 A 有一个名为 doSomething 的方法 该方法是同步的 要求是 A 的所有子类都是强制性的重写 doSomething me
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i
  • 对 Java 协议缓冲区对象进行一些小更改

    我想在 Java 协议缓冲区对象树的深处进行一个小更改 我可以使用 getBuilder 方法来创建一个新对象 该新对象是旧对象的克隆并进行一些更改 当深入完成此操作时 代码会变得丑陋 Quux Builder quuxBuilder fo
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器

随机推荐

  • 此 C# 编码代码的 PHP 等效项是什么?

    我想将以下 C 代码转换为 PHP C 是 byte operation UTF8Encoding UTF8 GetBytes getfaqs byte secret UTF8Encoding UTF8 GetBytes Password
  • Selenium ChromeDriverManager 不下载最新版本的 ChromeDriver

    我有一个错误 E selenium common exceptions SessionNotCreatedException Message session not created This version of ChromeDriver
  • 如何从 Angular 中的子路由组件访问父组件属性?

    我是 Angular 的新手 我被困在那里 我知道如何通过将 parentData var 注入子选择器 来在父组件和子组件之间共享数据 但是当使用路由时 我只有一个路由器出口 无法将 parentData 绑定到它 因为它会引发错误 从子
  • 如何将 NSURLSessionConfiguration 配置到 NSObject 类中?

    我想得到服务器响应NSObject当我收到响应时 它已返回到 viewController as 我在服务器调用上实现NSObject上课然后我打电话给NSObject方法但在服务器响应之前我的NSString已返回为null NSObje
  • Python 中的非二叉树数据结构

    有谁知道我如何重新创建这个 最终目标是遍历树并计算每个端点 在这种情况下3因为1 3 2都是端点 如果您不想使用简单的列表 您可以构建一个基本类 就像是 class NonBinTree def init self val self val
  • 如何在 Fragment 中使用 MediaPlayer 到 SurfaceView

    因为我希望能够传递播放视频的 MediaPlayer 所以我想在播放视频的片段中使用 SurfaceView 而不是 VideoView 我看了一个先前的问题 https stackoverflow com questions 167005
  • 操作处理程序不适用于视图本身

    操作处理程序不能直接在视图实例上工作吗 我想将其直接附加到整个视图本身 而不是在视图中附加操作处理程序 示例 jsFiddle http jsfiddle net t3wdG http jsfiddle net t3wdG UPDATE 我
  • from 子句中的 JPA 子查询

    我们正在开发一个使用 EJB 连接到数据库的 Web 应用程序 在我们的数据库模型中 我们有一个移动设备表 另一个具有功能的表 最后一个将功能值与手机型号进行映射 模型 id model 特征 id feature model featur
  • 从cfscript中的coldfusion newQuery()获取结果元数据

    关于 CFscript 的文档在文档中有点稀疏 并且搜索 cfscript 特定答案会在 CF 标签答案中丢失 所以这是我的问题 如何从使用脚本执行的查询中获取结果元数据 使用我可以添加的标签result myNamedResultVar
  • 如何在 Swift 中迭代对象数组?

    我有物体 var person1 Person person1 name Joe person1 lastName Doe person1 age 21 var person2 Person person2 name Julia perso
  • 像文字处理器一样格式化文本的 iPhone 应用程序

    很抱歉提出这样的一般性问题 但我想知道是否 以及如何 可以编写一个 iPhone 应用程序 在不同页面上格式化 txt 文件 就像 Microsoft Word 在布局模式下打开一个新文档时所做的那样 并且粘贴一个txt文件 换句话说 我不
  • 如何重新加载当前页面?

    我有一个用于编辑用户的页面 里面有一些子组件 每个子组件都可以更改其父组件或对其父组件产生一些影响 因此 我没有向父级发出更改并更新某些字段 而是使用 重新加载 当前页面 private route ActivatedRoute reloa
  • android:minHeight 在 web 视图中不起作用

    我有以下 xml 文件
  • 使用 loadData 在 UIWebView 中显示 PDF

    我正在尝试显示本地存储在 UIWebView 中的 PDF 这就是我目前尝试执行此操作的方式 if NSFileManager defaultManager fileExistsAtPath self url LOG ERROR Could
  • 如何返回 JsonResult [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在编写这个 AJAX 方法时遇到问题 我想返回一个JsonResult 似乎是合乎逻辑的事情 我能找到的所有例子都可以使用Jso
  • 在Python中访问第n维[重复]

    这个问题在这里已经有答案了 我想要轻松读取多维 numpy 数组的某些部分 对于任何数组 访问第一维都很容易 b index 另一方面 访问第六维度是 困难的 尤其是阅读 b index the next person to read th
  • 角度 HTTP POST 请求

    我在 Angular2 和 Spring MVC 中构建一个应用程序 当我尝试向我的服务器发出 POST 请求时 我没有收到任何成功或失败的迹象 但请求没有发生 因为我看不到新的数据 当我从邮递员那里发出请求时 请求成功 我可以看到新数据
  • 什么时候应该使用 MySQLi 而不是 MySQL?

    有人可以帮我解释一下使用 MySQLi 而不是 MySQL 的优点和缺点吗 是否存在不应该使用 MySQLi 的情况 为了使用 MySQLi 我是否需要以不同的方式配置我的服务器 例如 我是否需要升级 Apache 或 PHP 才能支持 M
  • 如何创建带有百分比计数器的 jQuery 预加载器?

    我编写了从一本 jQuery 初学者书中学到的代码 它非常适合作为页面的预加载器 但我如何为其创建百分比 计数器呢 基于加载了多少正文内容 目前我只有一个动画 GIF 但我想要一些更高级的东西 Lets preload window loa
  • 使用转换器和提供程序而不是属性映射时如何让 ModelMapper.validate() 成功?

    有类似的东西 Getter Setter public static class Entity private int hash private LocalDateTime createdTime and Getter Setter pub