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 ...
随机推荐
- 7-8 Left-pad
思路 注意读入和输出格式 如果用fgets读入的话会带上回车,输出的时候一定不要输出了双回车 并且此时的length也会比原始长度多了一,要注意长度比较,这里容易出错 代码 #include < ...
- wampserver apache 403无权限访问 You don't have permission to access /index.html on this server
今天接到要求 需要配置一下https 折腾好久 最后好还遇到了权限不够的问题 最后解决方案如下 我这边补充一下我的方法 我的apache是 2.4.23 版本 是由 wampserver集成的 在 h ...
- java 面试架构篇
1.非功能需求会考虑哪些? 可用性.扩展性.性能: 2.有没有遇到过建了索引反而变慢的情况? 3.从哪些角度去设计系统? 4.代码中使用过的设计模式?
- PowerDesigner--comment和name互相复制
1.comment复制到name 脚本代码: Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl Set ...
- KFC 小猪短租
# 分析肯德基门店信息 import requests,json post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op= ...
- Mount命令的参数详解
导读 mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了. 挂接命令(mount) 首先,介绍 ...
- 「JSOI2015」套娃
「JSOI2015」套娃 传送门 考虑贪心. 首先我们假设所有的套娃都互相不套. 然后我们考虑合并两个套娃 \(i\),\(j\) 假设我们把 \(i\) 套到 \(j\) 里面去,那么就可以减少 \ ...
- JavaScript可枚举的属性
/* 把P中的可枚举属性复制到o中,并返回o中 如果o和p中含有同名的属性,则覆盖O中的属性 这个函数并不处理getter和setter以及复制属性 */ function extend(o,p){ ...
- SDNU_ACM_ICPC_2020_Winter_Practice_2nd
A - [The__Flash]的矩阵 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大. Input输入数据的第一行为一个正整数T,表示有T组测试数据.每一组测试数据 ...
- 【MySQL】数据类型之字符相关
" 目录 字符类型 char类型 varchar类型 实测 总结 枚举类型与集合类型 字符类型 官网:https://dev.mysql.com/doc/refman/5.7/en/char ...