使用场景:前台的多种时间格式存入后台,后台返回同时的时间格式到前台。

1 在config目录下配置jscksonConfig.java

  1. package com.test.domi.config;
  2.  
  3. import com.fasterxml.jackson.core.JsonGenerator;
  4. import com.fasterxml.jackson.core.JsonProcessingException;
  5. import com.fasterxml.jackson.databind.JsonSerializer;
  6. import com.fasterxml.jackson.databind.ObjectMapper;
  7. import com.fasterxml.jackson.databind.SerializerProvider;
  8. import com.fasterxml.jackson.databind.module.SimpleModule;
  9. import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
  10. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  11. import org.springframework.context.annotation.Bean;
  12. import org.springframework.context.annotation.Primary;
  13. import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
  14. import java.io.IOException;
  15. import java.math.BigDecimal;
  16. import java.text.SimpleDateFormat;
  17. import java.util.Date;
  18.  
  19. /**
  20. * 时间序列化
  21. */
  22. public class JacksonConfig {
  23.  
  24. @Bean
  25. @Primary
  26. @ConditionalOnMissingBean
  27. public ObjectMapper jacksonOnjectMapper(Jackson2ObjectMapperBuilder builder){
  28. ObjectMapper objectMapper = builder.createXmlMapper(false).build();
  29. //将json属性的空值null转化为空字符串""
  30. objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
  31. @Override
  32. public void serialize(Object arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException, JsonProcessingException {
  33. arg1.writeString("");
  34. }
  35. });
  36. //json转换日期格式设置
  37. objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
  38. SimpleModule simpleModule = new SimpleModule();
  39. //在进出前后台的时候,设置BigDecimal和字符串之间转换
  40. simpleModule.addSerializer(BigDecimal.class,ToStringSerializer.instance);
  41. //设置对前台传入的多种格式的时间都支持序列化
  42. simpleModule.addDeserializer(Date.class,CommonDateDeserializer.INSTANCE);
  43. objectMapper.registerModule(simpleModule);
  44. return objectMapper;
  45. }
  46. }
  1. config目录下CommonDateDeserializer继承stdScalarDeserializer序列化类,重写deserialize序列化设置方法
  1. package com.test.domi.config;
  2.  
  3. import com.fasterxml.jackson.core.JsonParser;
  4. import com.fasterxml.jackson.core.JsonProcessingException;
  5. import com.fasterxml.jackson.core.JsonToken;
  6. import com.fasterxml.jackson.databind.DeserializationContext;
  7. import com.fasterxml.jackson.databind.DeserializationFeature;
  8. import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
  9. import org.apache.commons.lang.time.DateUtils;
  10. import java.io.IOException;
  11. import java.text.ParseException;
  12. import java.util.Date;
  13.  
  14. public class CommonDateDeserializer extends StdScalarDeserializer {
  15.  
  16. public static final CommonDateDeserializer INSTANCE = new CommonDateDeserializer(Date.class);
  17. private final String[] DATE_FORMAT_STRS = {"yyyy-MM-dd","yyyy/MM/dd"};
  18.  
  19. protected CommonDateDeserializer(Class vc) {
  20. super(vc);
  21. }
  22.  
  23. @Override
  24. public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
  25. JsonToken t = jsonParser.getCurrentToken();
  26. if (t == JsonToken.VALUE_STRING) {
  27. String str = jsonParser.getText().trim();
  28. if (str.length() == 0) {
  29. return getEmptyValue(deserializationContext);
  30. }
  31. try {
  32. return DateUtils.parseDate(str,DATE_FORMAT_STRS);
  33. } catch (ParseException e) {
  34. return (java.util.Date)deserializationContext.handleWeirdStringValue(handledType(),str,"expected format \"%s\"");
  35. }
  36. }
  37.  
  38. if (t == JsonToken.START_ARRAY && deserializationContext.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) {
  39. jsonParser.nextToken();
  40. final Date parsed = _parseDate(jsonParser,deserializationContext);
  41. t = jsonParser.nextToken();
  42. if (t != JsonToken.END_ARRAY) {
  43. handleMissingEndArrayForSingle(jsonParser,deserializationContext);
  44. }
  45. return parsed;
  46. }
  47. return super._parseDate(jsonParser,deserializationContext);
  48. }
  49. }

SpringBoot的json序列化及时间序列化处理的更多相关文章

  1. Newtonsoft.Json序列化日期时间去T的几种方式。

    原文地址:MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式. http://www.cnblogs.com/wuball/p/4231343. ...

  2. springboot学习(三)——http序列化/反序列化之HttpMessageConverter

    以下内容,如有问题,烦请指出,谢谢! 上一篇说掉了点内容,这里补上,那就是springmvc的http的序列化/反序列化,这里简单说下如何在springboot中使用这个功能. 使用过原生netty ...

  3. 解决MVC 时间序列化的方法

    1.全局处理 处理代码 publict static void SetSerializationJsonFormat(HttpConfiguration config) { // Web API co ...

  4. IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除

    1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/ ...

  5. SpringBoot缓存篇Ⅱ --- 整合Redis以及序列化机制

    一.Redis环境搭建 系统默认是使用ConcurrentMapCacheManager,然后获取和创建ConcurrentMapCache类型的缓存组件,再将数据保存在ConcurrentMap中 ...

  6. JSON与js对象序列化

    JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...

  7. Json.Net学习.集合序列化.

    只要集合实现了IEnumable接口就可以进行序列化 Json序列化器为序列化及反序列化集合对象提供了良好的支持. ->Serializing 为了序列化一个集合---一个泛型的list,arr ...

  8. java编解码技术,json序列化与二进制序列化

    1.何为json序列化与二进制序列化 通常我们在程序中采用的以json为传输,将json转为对象的就是json序列化了.而二进制序列化通常是我们将数据转换为二进制进行传输,然后在进行各类转换操作 2. ...

  9. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化

    度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...

随机推荐

  1. day2_jmeter断言

    断言就是:检查返回结果,测试是否通过,就是自动帮你校验结果用的 1)添加响应断言 我们模式匹配规格选择包括

  2. git 码云的常用命令(版本控制)

    首先在码云仓库创建对应的仓库 当你输入错误用户名和密码 需要清掉配置 git config --system --unset credential.helper 设置账号 git config --g ...

  3. 【Python全栈-HTML】HTML入门

    HTML入门介绍 参考: https://www.bilibili.com/video/av21663728/?p=339 http://www.cnblogs.com/yuanchenqi/arti ...

  4. Swift中"#"的用法

    配置外部参数名 在函数(或者方法)的参数名前添加"#",可以使该参数拥有相同的本地参数名和外部参数名. 注:在方法中,第二个及后续的参数,默认是具有和内部参数一致的外部参数名的,只 ...

  5. java Map 怎么遍历

    java中遍历MAP的几种方法 Java代码 Map<String,String> map=new HashMap<String,String>();    map.put(& ...

  6. 海思QT4.8.0开发总结

    1.QT4.8.0移植 2.QT4.8.0界面的透明度设置 发现设置空间透明度时候,QT显示的绿色的背景,没有透明!设置如下: 在程序起始的地方设置: hisi_init(); QWSServer:: ...

  7. 第三节:Windows下检出项目和提交项目

    1.将项目下载到本地: 2.在客户端中,右键点击test,选择show in explorer: 然后修改日志文件并保存: 3.在客户端中填写备注并提交: 4.提交到github中:

  8. 认识程序的执行:从高级语言到二进制,以java为例

    java 高级编程语言,面向对象*.java是源码文件*.class是字节码文件,一种中间文件. JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的 ...

  9. MySQL 5.6 Index Condition Pushdown

    ICP(index condition pushdown)是mysql利用索引(二级索引)元组和筛字段在索引中的where条件从表中提取数据记录的一种优化操作.ICP的思想是:存储引擎在访问索引的时候 ...

  10. 手把手教你用 Git(转)

    转自:http://blog.jobbole.com/78960/ 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统, ...