jackson处理日期异常
jackson处理日期异常
1.异常信息
2.原因
3.解决办法
- public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
 - @Override
 - public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
 - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 - String date = jp.getText();
 - try {
 - return format.parse(date);
 - } catch (ParseException e) {
 - throw new RuntimeException(e);
 - }
 - }
 - }
 
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
			@Override
			public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				String date = jp.getText();
				try {
					return format.parse(date);
				} catch (ParseException e) {
					throw new RuntimeException(e);
				}
			}
		}
b.在实体类属性的set方法上进行注册
- @JsonDeserialize(using = CustomJsonDateDeserializer.class)
 - public void setDate(Date date) {
 - this.date = date;
 - }
 
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
public void setDate(Date date) {
this.date = date;
}
第二种解决办法(使用注解)
- import com.fasterxml.jackson.annotation.*;
 - @JsonIgnoreProperties(ignoreUnknown = true)
 - public class EmployeeProfile{
 - private String name;
 - private Integer age;
 - @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
 - private Date creation_date;
 - }
 
- /**
 - * 类说明:自定义jackson日期转换器,因为jackson内置支持转换的日期格式比较少
 - */
 - public class CustomJsonDateDeserializer extends JsonDeserializer<Date>{
 - //添加不同的日期格式
 - private static List<String> formats = new ArrayList<String>();
 - static{
 - formats.add("yyyy");
 - formats.add("yyyy-MM");
 - formats.add("yyyy-MM-dd");
 - formats.add("yyyy-MM-dd HH:mm");
 - formats.add("yyyy-MM-dd HH:mm:ss");
 - formats.add("yyyy/MM");
 - formats.add("yyyy/MM/dd");
 - formats.add("yyyy/MM/dd HH:mm");
 - formats.add("yyyy/MM/dd HH:mm:ss");
 - }
 - @Override
 - public Date deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
 - String dateStr = jp.getText();
 - try {
 - if (dateStr.matches("^\\d{4}$")) {//2017
 - return parseDate(dateStr, formats.get(0));
 - } else if (dateStr.matches("^\\d{4}-\\d{1,2}$")) {//2017-09
 - return parseDate(dateStr, formats.get(1));
 - } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {//2017-09-10
 - return parseDate(dateStr, formats.get(2));
 - } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {//2017-09-10 21:15
 - return parseDate(dateStr, formats.get(3));
 - } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {//2017-09-10 21:15:30
 - return parseDate(dateStr, formats.get(4));
 - } else if (dateStr.matches("^\\d{4}/\\d{1,2}$")) {//2017/09
 - return parseDate(dateStr, formats.get(5));
 - } else if (dateStr.matches("^\\d{4}/\\d{1,2}/\\d{1,2}$")) {//2017/09/10
 - return parseDate(dateStr, formats.get(6));
 - } else if (dateStr.matches("^\\d{4}/\\d{1,2}/\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {//2017/09/10 21:15
 - return parseDate(dateStr, formats.get(7));
 - } else if (dateStr.matches("^\\d{4}/\\d{1,2}/\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {//2017/09/10 21:15:30
 - return parseDate(dateStr, formats.get(8));
 - } else {
 - throw new BetException("在jackson自定义全局日期转换器,没有相对应的日期格式与传入的日期相匹配!!!");
 - }
 - } catch (Exception e) {
 - e.printStackTrace();
 - }
 - return null;
 - }
 - /**
 - * 功能描述:格式化日期
 - *
 - * @param dateStr
 - * String 字符型日期
 - * @param format
 - * String 格式
 - * @return Date 日期
 - */
 - public Date parseDate(String dateStr, String format) {
 - Date date=null;
 - SimpleDateFormat dateFormat = new SimpleDateFormat(format);
 - dateFormat.setLenient(false);//指定日期/时间解析为不严格
 - try {
 - date = (Date) dateFormat.parse(dateStr);
 - } catch (ParseException e) {
 - e.printStackTrace();
 - } catch (Exception e1) {
 - e1.printStackTrace();
 - }
 - return date;
 - }
 
/**
* 类说明:自定义jackson日期转换器,因为jackson内置支持转换的日期格式比较少
*/
public class CustomJsonDateDeserializer extends JsonDeserializer<Date>{
//添加不同的日期格式
private static List<String> formats = new ArrayList<String>();
static{
formats.add("yyyy");
formats.add("yyyy-MM");
formats.add("yyyy-MM-dd");
formats.add("yyyy-MM-dd HH:mm");
formats.add("yyyy-MM-dd HH:mm:ss");
formats.add("yyyy/MM");
formats.add("yyyy/MM/dd");
formats.add("yyyy/MM/dd HH:mm");
formats.add("yyyy/MM/dd HH:mm:ss");
}@Override
public Date deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
String dateStr = jp.getText();
try {
if (dateStr.matches("^\\d{4}$")) {//2017
return parseDate(dateStr, formats.get(0));
} else if (dateStr.matches("^\\d{4}-\\d{1,2}$")) {//2017-09
return parseDate(dateStr, formats.get(1));
} else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {//2017-09-10
return parseDate(dateStr, formats.get(2));
} else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {//2017-09-10 21:15
return parseDate(dateStr, formats.get(3));
} else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {//2017-09-10 21:15:30
return parseDate(dateStr, formats.get(4));
} else if (dateStr.matches("^\\d{4}/\\d{1,2}$")) {//2017/09
return parseDate(dateStr, formats.get(5));
} else if (dateStr.matches("^\\d{4}/\\d{1,2}/\\d{1,2}$")) {//2017/09/10
return parseDate(dateStr, formats.get(6));
} else if (dateStr.matches("^\\d{4}/\\d{1,2}/\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {//2017/09/10 21:15
return parseDate(dateStr, formats.get(7));
} else if (dateStr.matches("^\\d{4}/\\d{1,2}/\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {//2017/09/10 21:15:30
return parseDate(dateStr, formats.get(8));
} else {
throw new BetException("在jackson自定义全局日期转换器,没有相对应的日期格式与传入的日期相匹配!!!");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 功能描述:格式化日期
*
* @param dateStr
* String 字符型日期
* @param format
* String 格式
* @return Date 日期
*/
public Date parseDate(String dateStr, String format) {
Date date=null;
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
dateFormat.setLenient(false);//指定日期/时间解析为不严格
try {
date = (Date) dateFormat.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
} catch (Exception e1) {
e1.printStackTrace();
}
return date;
}</pre></div>
    	</article>
	<div class="article-bar-bottom">
			<div class="article-copyright">
		版权声明:本文为博主原创文章,未经博主允许不得转载。			https://blog.csdn.net/mzy755423868/article/details/79010313		</div>
							<div class="tags-box">
		<span class="label">个人分类:</span>
					<a class="tag-link" href="https://blog.csdn.net/mzy755423868/article/category/7390132" target="_blank">其他问题解决						</a>
	</div>
				</div>
<!-- !empty($pre_next_article[0]) -->
	</div>
JavaBean中的属性配置注解
@JsonDeserialize(using = XXXDeserializer.class)
@JsonSerialize(using = XXXSerializer.class)
using 属性值为 需要解析的日期类型 对应的解析器或自定义解析器
jackson处理日期异常的更多相关文章
- spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava
		
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
 - mysql0000-00-00日期异常及解决方法
		
当mysql的datetime类型的值设置为0000-00-00 00:00:00(或者 0000-00-00)的时候,java的datetime或者timestamp读取到这个值并转换的时候,将抛出 ...
 - Jackson 格式化日期问题
		
Jackson 默认是转成timestamps形式的,如何使用自己需要的类型, 解决办法: 1.在实体字段上使用@JsonFormat注解格式化日期 @JsonFormat(locale=" ...
 - [心得体会]springmvc在requestbody注解下使用jackson转化日期格式
		
使用WebMvcConfigurer的方法将converter注入到项目中 @Configurationpublic class ConverterConfig implements WebMvcCo ...
 - jackson对日期的处理(序列化与反序列化)
		
https://blog.csdn.net/cover1231988/article/details/76021478
 - Jackson序列化日期类型的属性
		
@JsonProperty("BankSettlementDate") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = ...
 - Springboot Jackson配置根本方案, 日期格式化, 时区设置生效
		
当项目集成配置的功能越来越多, 说不准哪个配置就影响到了什么. 比如你启用了EnableMvC, 默认配置文件配置的一些文件就失效了. 虽然约定大于配置,让springboot可以极简化构建, 但不熟 ...
 - Jackson实现Object对象与Json字符串的互转
		
在项目开发过程中,当客户端与服务器响应时,数据交互是必不可少的.然而通过Json实现数据交互成为我们开发中的一部分,进而Jackson为我们的Json转化提供了很好的机制.下面我将利用实例总结如何使用 ...
 - Java的日期工具类
		
package com.tech.jin.util; import java.text.DateFormat; import java.text.ParseException; import java ...
 
随机推荐
- DP_1d1d诗人小G
			
显然:f[i]=min{f[j]+(s[i]-s[j]+i-j-1-l)^p} 此题可以基于决策单调优化 证明,反正我现在不打算学 实际上就是双向队列 不停弹出队头的元素,直到当前位置在队头元素最优的 ...
 - sqli-libs(54-65关)
			
Less_54 Less-54:使用’’包裹 对输入的次数做了限制,必须在10次请求之内获取信息,否则会刷新表名 输入:?Id=1’ order by 3--+ 查看有多少列: 输入 ?id=-1 ...
 - [lua]紫猫lua教程-命令宝典-L1-01-02. 变量
			
L1[变量]01. 变量命名规则 命名规则:数字字母下划线构成 但是不能数字开头 不推荐中文名 很多都是不支持中文 但是在一些其他的编辑器里面 比如触摸精灵 之类的 就可以 注意 :变量命名必须要包含 ...
 - 远程控制服务:配置sshd服务,密钥验证登陆
			
配置sshd服务 1.概述: SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理 Linux 系统的首选方式.在此之前,一般使用 FTP 或 Telnet 来 ...
 - flask 2 进阶
			
# 创建项目 jinja2 语法基础 # pycharm 里面 创建 new project -->pure python 之后选择路径 选择解释器 以及虚拟环境问题 from flask im ...
 - KFC  小猪短租
			
# 分析肯德基门店信息 import requests,json post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op= ...
 - Windows系统重装记录
			
材料: u盘(需4g以上) windows官方镜像 附:windows个版本比较 步骤: u盘格式化(为了装启动盘系统需要清空数),备份系统盘所需要的的数据 下载适合自己的官方镜像,可从该网站下载(官 ...
 - 一周搞定模拟电路_P5_基本放电电路记录
			
1.原始基本放大电路 2.改变Rb,Rb由200kΩ变为100kΩ 3 4
 - Python--比较两个字典部分value是否相等(可以用于接口自动化)
			
eg:例如你调用了一个新增的接口,以往功能测试的话,你再web端新增一个店铺之后,你肯定要去数据库中查看,这些数据插入的对不对,是否正确的插入了每个字段 # 比较两个字典部分是否相等 def comp ...
 - springboot  注解@EnableConfigurationProperties @ConfigurationProperties作用
			
@EnableConfigurationProperties 在springboot启动类添加,当springboot程序启动时会立即加载@EnableConfigurationProperties注 ...