Json与Java Bean互相转换时,Bean中的Timestamp字段是无法直接处理的,需要实现两个转换器。
DateJsonValueProcessor的作用是Bean转换为Json时将Timepstamp转换为指定的时间格式。
import java.text.SimpleDateFormat;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
public class DateJsonBeanProcessor implements JsonValueProcessor {
private String[] formats;
public DateJsonBeanProcessor(String[] formats) {
this.formats = formats;
}
@Override
public Object processArrayValue(Object arg0, JsonConfig arg1) {
return null;
}
@Override
public Object processObjectValue(String key, Object value, JsonConfig arg2) {
if (value instanceof java.sql.Timestamp) {
SimpleDateFormat dateParser = null;
for (int i = 0; i < formats.length; i++) {
if (null == dateParser) {
dateParser = new SimpleDateFormat(formats[i]);
} else {
dateParser.applyPattern(formats[i]);
}
try {
return new SimpleDateFormat(formats[i]).format((java.sql.Timestamp) value);
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
return value.toString();
}
}
TimestampMorpher的作用则与DateJsonValueProcessor相反,它是在Jsonl转换为Bean时,会把指定的时间格式转换为Timestamp
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import net.sf.ezmorph.MorphException;
import net.sf.ezmorph.object.AbstractObjectMorpher;
public class TimestampMorpher extends AbstractObjectMorpher {
private String[] formats;
public TimestampMorpher(String[] formats) {
this.formats = formats;
}
@Override
public Object morph(Object value) {
if (value == null) {
return null;
}
if (Timestamp.class.isAssignableFrom(value.getClass())) {
return (Timestamp) value;
}
if (!supports(value.getClass())) {
throw new MorphException(value.getClass() + " 是不支持的类型");
}
String strValue = (String) value;
SimpleDateFormat dateParser = null;
for (int i = 0; i < formats.length; i++) {
if (null == dateParser) {
dateParser = new SimpleDateFormat(formats[i]);
} else {
dateParser.applyPattern(formats[i]);
}
try {
return new Timestamp(dateParser.parse(strValue.toLowerCase()).getTime());
} catch (ParseException e) {
// e.printStackTrace();
}
}
return null;
}
@Override
public Class morphsTo() {
return Timestamp.class;
}
}
测试代码:
public class JsonTest {
public static void main(String[] args) {
String jsonStr="{\"id\":\"101\",\"name\":\"张三\",\"age\":\"20\",\"birthday\":\"1992-10-19 23:52:18\"}";
Student s = new Student();
Timestamp b = Timestamp.valueOf("1992-10-19 23:52:18");
s.setId(123456);
s.setName("李四");
s.setAge(20);
s.setBirthday(b);
String[] formats = {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd"};
JSONUtils.getMorpherRegistry().registerMorpher(new TimestampMorpher(formats));
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
Student s1 = (Student)JSONObject.toBean(jsonObject,Student.class);
System.out.println(s1.getBirthday());
JsonConfig config=new JsonConfig();
config.registerJsonValueProcessor(Timestamp.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));
JSONObject json=JSONObject.fromObject(s1,config);
System.out.println(json.toString());
}
}
分享到:
相关推荐
不懂这块的看看啦,mysql中中四中时间类型之一的TimeStamp,在项目中的简单运用,如何将TimeStamp转换成自己需要的时间格式
数据库类型Timestamp与java.util.Date类型相互转化,有完整步骤,实测可行。
oracle中TIMESTAMP与DATE比较
纯 C 语言实现的日期时间和timestamp互转的 API 调用,可用于嵌入式。函数名极简单明了,无文档。
文章目录Timestamptimestamp.go如何使用 Timestamp path: google/protobuf/timestamp.proto 在 timestamppb 中 Timestamp 包含两个字段 seconds 表示秒 nanos 表示纳秒 message Timestamp { int64 seconds = 1; ...
有关java中的Date,String,Timestamp之间的转化问题
做开发中难免时间类型之间的转换, 最近就发现前端js和后端django经常要用到这个转换, 其中jsDate.now()精确到毫秒,而Python中Datetime.datetime.now()是精确到微秒的。 1. 字符串日期时间转换成时间戳 # '2015-...
使用TimeStamp控制并发问题示例,主要内容是在数据库中怎样防上两个以上用户同时使用数据而产生的并发操作
NULL 博文链接:https://zhengkaifl.iteye.com/blog/734139
Date、String、Timestamp之间的转换 ;里面有详细易懂的转换方法,供大家参考
spirng-boot 的时间类型(date、datetime、timestamp)的全局配置, 以及mysql的时间字段如何设置。
SQL DDL至JSON模式转换器 将SQL DDL语句转换为JSON格式(JSON模式和紧凑格式)。 承诺中 了解内部 手边的脚本Visual Studio程式码 链接 概述 使用以下SQL: CREATE TABLE users ( id INT ( 11 ) NOT NULL AUTO_...
ICMP timestamp请求响应漏洞 修复 Traceroute探测漏洞 修复 使用firewall-cmd打开关闭防火墙与端口 linux 7 ICMP timestamp请求响应漏洞 修复 Traceroute探测漏洞 修复 使用firewall-cmd打开关闭防火墙与端口 linux ...
oracle中日期类型与unix 时间戳的转换, Unix时间戳记是从'1970-01-01 00:00:00'GMT...--unix时间戳与date时间互转 SELECT oracle_to_unix(SYSDATE),unix_to_oracle(1551774286),oracle_to_unix(SYSDATE) FROM dual;
主要介绍了MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数,需要的朋友可以参考下
在Json中转化字符串到Bean时解决Timestamp格式数据报错问题
mysql数据库数据到oracle数据库的快速转换工具,好用,好用。
1.api测试需要格式化输出json格式且json格式中具有时间戳需要被参数化 2."{\n" + " \"appId\":\"cdbflc_access_token\",\n" + " \"timestamp\":\"%s\",\n" + " \"frameNo\": \"UCCS1702494201659\",\n" ...
oracle timestamp详解 将常用的转换方法及使用注意事项都罗列出来了