文档章节

Dozer 自定义Converter -- LocalDateTime to Date

zgw06629
 zgw06629
发布于 2015/10/25 21:05
字数 284
阅读 2772
收藏 3

Spring boot项目,使用dozer将Jpa Entity中的LocalDateTime属性转到DTO中对应的LocalDateTime属性中报错

java.lang.NoSuchMethodException: java.time.LocalDateTime.<init>()
	at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_51]
	at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_51]
	at org.dozer.factory.ConstructionStrategies$ByConstructor.newInstance(ConstructionStrategies.java:272) ~[dozer-5.5.1.jar:na]

将DTO中的LocalDateTime换成Date又报错

java.lang.NumberFormatException: For input string: "2015-10-17T17:55:12.091"

解决方法:

添加一个自定义Convert

public class LocalDateTimeToDateDozerConverter extends DozerConverter<LocalDateTime, Date> {

  public LocalDateTimeToDateDozerConverter() {
    super(LocalDateTime.class, Date.class);
  }

  @Override
  public LocalDateTime convertFrom(Date source, LocalDateTime destination) {
    LocalDateTime dateTime = LocalDateTime.ofInstant(source.toInstant(), ZoneId.systemDefault());
    return dateTime;
  }

  @Override
  public Date convertTo(LocalDateTime source, Date destination) {
    Date convertToDate = Date.from(source.atZone(ZoneId.systemDefault()).toInstant());
    return convertToDate;
  }

}

在类路径下添加一个xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://dozer.sourceforge.net
          http://dozer.sourceforge.net/schema/beanmapping.xsd">
  <configuration>
    <custom-converters> <!-- these are always bi-directional -->
      <converter type="com.demo.LocalDateTimeToDateDozerConverter" >
        <class-a>java.time.LocalDateTime</class-a>
        <class-b>java.util.Date</class-b>
      </converter>
    </custom-converters>     
  </configuration>
  
</mappings>

注意像这样的全局配置只能使用xml的形式配置,见官方文档

In fact some parts of the configuration (e.g. global configuration block) are only possible to express in Xml format.

Spring boot启动类中添加如下配置

 @Bean
  public Mapper dozerBeanMapper() {
    List<String> mappingFileUrls = Lists.newArrayList("dozer-custom-convert.xml");
    DozerBeanMapper mapper = getSingletonDozerBeanMapper();
    mapper.setMappingFiles(mappingFileUrls);
    return mapper;
  }

参考文档

http://dozer.sourceforge.net/documentation/customconverter.html

http://stackoverflow.com/questions/29550417/why-dozerconverter-is-not-working


© 著作权归作者所有

zgw06629

zgw06629

粉丝 18
博文 54
码字总数 30471
作品 0
海淀
程序员
私信 提问
Java8简明指南

Java8简明指南 欢迎来到Java8简明指南。本教程将一步一步指导你通过所有新语言特性。由短而简单的代码示例,带你了解如何使用默认接口方法,lambda表达式,方法引用和可重复注解。本文的最后你会...

王爵nice
2015/09/15
364
2
SpringBoot入坑指南之七:格式化LocalTime、LocalDate和LocalDateTime

开篇 好久好久没更新这个文集了,上一次更新我都忘记是什么时间了,原计划Spring Boot系列会写十几篇文章的,现在才写到第7篇(含本文),后续还是会继续更新吧,我一直觉得,写博客的主要目...

centychen
07/14
111
0
Java for Web学习笔记(一零八):再谈Entity映射(1)数据转换

timestamp或datetime的匹配 存放毫秒 在数据库中缺省的精度为秒,如果需要存放毫秒甚至更好,可以如下: CREATE TABLE Ticket (TicketId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY ...

flowingflying
2018/01/29
0
0
Date-Time API简介

  Date-Time API简介      在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。但使用Date类却有诸多的弊端,如: java.util.Date 是非线程安全的,所有的日期...

SEOwhywhy
2018/12/12
24
0
java 计算两个时间差的时分秒

public static long getMinute(LocalDateTime inDate, LocalDateTime nowDate) {Duration duration = java.time.Duration.between(inDate, nowDate);logger.info("时间差:" + duration.getSe......

林伟琨
2018/08/11
91
0

没有更多内容

加载失败,请刷新页面

加载更多

医疗在线客服咨询系统有哪些特点?

随着中国互联网网站的的快速发展,至今医疗行业已经拥有了独立的的运营网站,其中最具特色的便属于医疗在线客服咨询系统,医疗在线客服咨询系统为每个访问网站的患者提供即时的网络在线客服服...

唯喏
今天
10
0
skywalking(容器部署)

skywalking(容器部署) 标签(空格分隔): APM [toc] 1. Elasticsearch SkywalkingElasticsearch 5.X(部分功能报错、拓扑图不显示) Skywalking需要Elasticsearch 6.X docker network create......

JUKE
今天
8
0
解决Unable to find a single main class from the following candidates [xxx,xxx]

一、问题描述 1.1 开发环境配置 pom.xml <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--一定要对上springboot版本号,因......

TeddyIH
今天
7
0
玩转Spring Boot 注册Servlet、Filter、Listener

玩转Spring Boot 注册Servlet、Filter、Listener JAVA架构师Ya七月 2019-08-23 玩转Spring Boot 注册Servlet、Filter、Listener 在Servlet 3.0之前我们都是使用web.xml进行配置,需要增加Ser...

Java架构师ya七
今天
5
0
Dubbo服务限制大数据传输抛Data length too large: 13055248, max payload: 8388608解决方案

当dubbo服务提供者向消费层传输大数据容量数据时,会受到Dubbo的限制,报类似如下异常: 2019-08-23 11:04:31.711 [ DubboServerHandler-XX.XX.XX.XXX:20880-thread-87] - [ ERROR ] [com.al...

huangkejie
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部