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; ...
随机推荐
- iOS-静态库,动态库,framework,bundle浅析(四)
1. 创建bundle,如图,点击 + ,弹出选择框, macOS 下的Framework & Library ,点击bundle,输入bundle的名字,然后点击 finish. 图 ...
- 内部排序->归并排序->2-路归并排序
文字描述 假设初始序列有n个记录,则可看成是n个有序的字序列,每个字序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列:再两两归并,…, 如此重复,直到得到一个长度为n的有序序列为 ...
- winform窗体启动过程
窗体启动执行顺序:FormShowFormPaintFormActivateFormResize 关闭窗体过程FormCloseFormDestroy 最小化再最大化:FormPaintFormRes ...
- 洛谷P3246 序列 [HNOI2016] 莫队/线段树+扫描线
正解:莫队/线段树+扫描线 解题报告: 传送门! 似乎是有两种方法的,,,所以分别港下好了QAQ 第一种,莫队 看到这种询问很多区间之类的就会自然而然地想到莫队趴?然后仔细思考一下,发现复杂度似乎是欧 ...
- MyBatis 返回insert操作主键
应用场景 在向数据库插入数据时,需要保留插入数据的id,以便进行后续的update操作或者将id存入其他表作为外键.但是,在默认情况下,insert操作返回的是一个int值,它并非表示主键id ...
- JdbcTemplate中向in语句传参
spring jdbc包提供了JdbcTemplate和它的两个兄弟SimpleJdbcTemplate和NamedParameterJdbcTemplate,我们先从JdbcTemplate入手, ...
- mysql之show engine innodb status解读(转)
add by zhj: 我第一次知道这个命令是线上服务出了问题,然后同事用这个命令去查看死锁.但用这个命令看死锁有一定的局限性,它只能看到最后一次死锁, 而且只能看到死锁环中的两个事务所执行的最后一条 ...
- dedecms首页去掉index.html怎么设置
很多网友用IIS服务器建站,反映说dedecms首页默认多了一个/index.html,一般是没有这个后缀的,直接就**.com,那么如何将dedecms首页去掉index.html呢?很简单,服务器 ...
- The iOS Simulator deployment target is set to 6.0
XCODE警告 Showing All Messages :-1: The iOS Simulator deployment target is set to 6.0, but the range o ...
- docker+jenkins+maven简单部署
构建jar包 1.拉取jenkins容器景象 docker pull docker.io/jenkins/jenkins 2.配置映射目录,创建一个容器 mkdir /data/jenkins doc ...