Spring boot jackson 时间格式问题
2017-07-01 00:00
1081 查看
这个问题是具体表现是这样的:
Spring boot Application 直接使用IDEA 运行没有任何问题,使用maven 打包也不存在问题,但是在打包之后执行时一直提示出现错误。错误的信息大致如下:
错误信息很多,干扰很多,不过最重要的是 jackson 的问题。
引起这个问题的原因是:
spring boot 往网页上输出了一个包含Date 的jason 字符串。
这个Date 转化为jason 的时间格式写在 application.yml 文件中:
删除application.yml 中的这几行,这个问题就不存在了。
删除之后, mvn clean package 打包不存在问,打包之后也能够正常输出, 但是会将时间字符串变成时间戳!
正常的是这样:
删除之后变成了这样:
使用 Gson 解决这个问题
这种情况下,我暂时不知道怎么解决。不过我通过不断查找,发现一个使用Gson 替代的方案:
首先,排除所有jackson 依赖!
pom.xml 中更改如下:
因为Spring boot 在不存在jackson 的时候会自动查找gson, 因此这样就可以直接用了。
然后, 更改jpa 表中的Date 项(如果有的话,因为jackson 都不存在了,所有依赖他的都必须要改):
然后,重新在application.yml
7fe0
文件中添加上面被删掉的代码!
此时运行程序,得到的结果多半是这样的:
还是与目标不符合,但是已经接近目标了!
最后一步:启动类中添加Gson Bean, 如下:
Spring boot 会自动加载这个Bean,达到了最终目的!
其实,加上Gson 之后,application.yml 中的那三行代码就可以不用要了。
Spring boot Application 直接使用IDEA 运行没有任何问题,使用maven 打包也不存在问题,但是在打包之后执行时一直提示出现错误。错误的信息大致如下:
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2017-06-30 23:36:35.931 ERROR 11916 --- [ main] o.s.boot.SpringApplication : Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jacksonObjectMapperBuilder' defined in class path resource [org/springframework/boot/autoconfigure/jackson/JacksonA utoConfiguration$JacksonObjectMapperBuilderConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instanti ate [org.springframework.http.converter.json.Jackson2ObjectMapperBuilder]: Factory method 'jacksonObjectMapperBuilder' threw exception; nested exception is java.lang.IllegalArgumentException: name at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE]
错误信息很多,干扰很多,不过最重要的是 jackson 的问题。
引起这个问题的原因是:
spring boot 往网页上输出了一个包含Date 的jason 字符串。
这个Date 转化为jason 的时间格式写在 application.yml 文件中:
spring: jackson: date-format: HH:mm:ss.SSSSSS joda-date-time-format: HH:mm:ss.SSSSSS
删除application.yml 中的这几行,这个问题就不存在了。
删除之后, mvn clean package 打包不存在问,打包之后也能够正常输出, 但是会将时间字符串变成时间戳!
正常的是这样:
{ "id": 42, "curingTime": "15:35:55.000370" }
删除之后变成了这样:
{ "id": 43, "curingTime": 56720161 }
使用 Gson 解决这个问题
这种情况下,我暂时不知道怎么解决。不过我通过不断查找,发现一个使用Gson 替代的方案:
首先,排除所有jackson 依赖!
pom.xml 中更改如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!--排除jackson 依赖--> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> </dependency> <!--添加gson--> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency>
因为Spring boot 在不存在jackson 的时候会自动查找gson, 因此这样就可以直接用了。
然后, 更改jpa 表中的Date 项(如果有的话,因为jackson 都不存在了,所有依赖他的都必须要改):
@Temporal(TemporalType.TIME) @DateTimeFormat(pattern = "HH:mm:ss.ssssss") //@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "HH:mm:ss.SSSSSS",timezone = "GMT+8") private Date curingTime;
然后,重新在application.yml
7fe0
文件中添加上面被删掉的代码!
此时运行程序,得到的结果多半是这样的:
{ "id": 44, "curingTime": "Jan 1, 1970 11:55:00 PM" }
还是与目标不符合,但是已经接近目标了!
最后一步:启动类中添加Gson Bean, 如下:
public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean public Gson getGson() { Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss.SSSSSS").create(); return gson; }
Spring boot 会自动加载这个Bean,达到了最终目的!
其实,加上Gson 之后,application.yml 中的那三行代码就可以不用要了。
相关文章推荐
- Spring boot 配置jackson 反序列化时间格式、忽略实体中没有的属性
- spring boot 架构问题 时间处理 (映射,时区问题)
- spring boot(一) 各种数据绑定 及时间格式化和时区问题 及XML格式与Bean,Map的互转
- 关于springboot时间存储的问题
- spring boot 架构问题 时间处理 (映射,时区问题)
- Spring Boot Spring MVC Rest json输出日期为时间戳的问题
- spring boot返回时间不准确的问题
- springboot返回时间问题
- Spring+SpringMvc+MyBatis(Hibernate) 中关于时间格式的问题总结
- SpringBoot返回date日期格式化,解决返回为TIMESTAMP时间戳格式或8小时时间差
- springboot 返回json格式数据的时间格式配置
- Spring boot集成Redis实现sessions共享时,sessions过期时间问题分析
- springboot 返回json格式数据时间格式配置
- springboot mysql jackson date问题
- Jackson框架转换时间格式不匹配的问题
- springboot 返回json格式数据时间格式配置
- spring boot 框架下前端传递时间映射到后端的Date类型问题
- [问题记录] spring-boot 打印启动时间
- spring boot时间类型差8小时问题
- 解决spring boot接收前端传递过来的json数据时,接收到的时间与实际传递时间不一致的问题