SpringBoot的json序列化及时间序列化处理
使用场景:前台的多种时间格式存入后台,后台返回同时的时间格式到前台。
1 在config目录下配置jscksonConfig.java
package com.test.domi.config; import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* 时间序列化
*/
public class JacksonConfig { @Bean
@Primary
@ConditionalOnMissingBean
public ObjectMapper jacksonOnjectMapper(Jackson2ObjectMapperBuilder builder){
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
//将json属性的空值null转化为空字符串""
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException, JsonProcessingException {
arg1.writeString("");
}
});
//json转换日期格式设置
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
SimpleModule simpleModule = new SimpleModule();
//在进出前后台的时候,设置BigDecimal和字符串之间转换
simpleModule.addSerializer(BigDecimal.class,ToStringSerializer.instance);
//设置对前台传入的多种格式的时间都支持序列化
simpleModule.addDeserializer(Date.class,CommonDateDeserializer.INSTANCE);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}
二 在config目录下CommonDateDeserializer继承stdScalarDeserializer序列化类,重写deserialize序列化设置方法
package com.test.domi.config; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import org.apache.commons.lang.time.DateUtils;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date; public class CommonDateDeserializer extends StdScalarDeserializer { public static final CommonDateDeserializer INSTANCE = new CommonDateDeserializer(Date.class);
private final String[] DATE_FORMAT_STRS = {"yyyy-MM-dd","yyyy/MM/dd"}; protected CommonDateDeserializer(Class vc) {
super(vc);
} @Override
public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
JsonToken t = jsonParser.getCurrentToken();
if (t == JsonToken.VALUE_STRING) {
String str = jsonParser.getText().trim();
if (str.length() == 0) {
return getEmptyValue(deserializationContext);
}
try {
return DateUtils.parseDate(str,DATE_FORMAT_STRS);
} catch (ParseException e) {
return (java.util.Date)deserializationContext.handleWeirdStringValue(handledType(),str,"expected format \"%s\"");
}
} if (t == JsonToken.START_ARRAY && deserializationContext.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) {
jsonParser.nextToken();
final Date parsed = _parseDate(jsonParser,deserializationContext);
t = jsonParser.nextToken();
if (t != JsonToken.END_ARRAY) {
handleMissingEndArrayForSingle(jsonParser,deserializationContext);
}
return parsed;
}
return super._parseDate(jsonParser,deserializationContext);
}
}
SpringBoot的json序列化及时间序列化处理的更多相关文章
- Newtonsoft.Json序列化日期时间去T的几种方式。
原文地址:MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式. http://www.cnblogs.com/wuball/p/4231343. ...
- springboot学习(三)——http序列化/反序列化之HttpMessageConverter
以下内容,如有问题,烦请指出,谢谢! 上一篇说掉了点内容,这里补上,那就是springmvc的http的序列化/反序列化,这里简单说下如何在springboot中使用这个功能. 使用过原生netty ...
- 解决MVC 时间序列化的方法
1.全局处理 处理代码 publict static void SetSerializationJsonFormat(HttpConfiguration config) { // Web API co ...
- IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除
1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/ ...
- SpringBoot缓存篇Ⅱ --- 整合Redis以及序列化机制
一.Redis环境搭建 系统默认是使用ConcurrentMapCacheManager,然后获取和创建ConcurrentMapCache类型的缓存组件,再将数据保存在ConcurrentMap中 ...
- JSON与js对象序列化
JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...
- Json.Net学习.集合序列化.
只要集合实现了IEnumable接口就可以进行序列化 Json序列化器为序列化及反序列化集合对象提供了良好的支持. ->Serializing 为了序列化一个集合---一个泛型的list,arr ...
- java编解码技术,json序列化与二进制序列化
1.何为json序列化与二进制序列化 通常我们在程序中采用的以json为传输,将json转为对象的就是json序列化了.而二进制序列化通常是我们将数据转换为二进制进行传输,然后在进行各类转换操作 2. ...
- DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化
度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...
随机推荐
- 问题:虚拟环境名字相同遇到bug,please specify a different sdk name?
1.please specify a different sdk name? 这个问题出现的原因是因为PyCharm中存在相同名字的虚拟环境变量. 本人的出错原因是,一直使用PyCharm的默认设置来 ...
- [knowledge][http] http
关于,底层承载协议的规定. HTTP communication usually takes place over TCP/IP connections. The [], but other port ...
- 内部排序->选择排序->堆排序
文字描述 堆排序中,待排序数据同样可以用完全二叉树表示, 完全二叉树的所有非终端结点的值均不大于(或小于)其左.右孩子结点的值.由此,若序列{k1, k2, …, kn}是堆,则堆顶元素(或完全二叉树 ...
- Linux下MySql的配置文件my.cnf详细 讲解
经常在使用MySql,但是对于MySql下面的各种参数的配置并不是很熟悉,经常在需要改变某项参数的时候,还要到处在网上查找,有点不方便.今天想把MySql下面的配置文件my.cnf详细的做一个说明(L ...
- LeetCode 463 Island Perimeter 解题报告
题目要求 You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 rep ...
- Spring 测试
1. pom.xml ==> Depency <!-- Test --> <dependency> <groupId>junit</groupId> ...
- Java如何写Common直接调用
一:新建Class类,命名为:Common 1. 写public static 公共的静态方法: 2. 直接用 Common.方法名 就可以直接调用. 例如:写一个获取当前星期的方法. /** ...
- 基于JAVA语言的selenium总结
目录一.基本语句 1.循环控制(break,continue) 3.字符的替换(replace,repalceFirst,replaceAll,regex) 4.字符串的连接("+" ...
- 【Python全栈-数据库】数据库基础
数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性, ...
- linux里source、sh、bash、./有什么区别(转)
add by zhj: 主要不同是,source是在当前shell中执行脚本,而sh, bash, ./是在当前shell的child shell中执行脚本 原文:http://www.cnblogs ...