我已经通过groovy阅读了关于json的新闻http://www.infoq.com/news/2014/04/groovy-2.3-json.所以我尝试使用原生方法来(反)序列化包含日期的groovy bean。但我在使用JsonOutput时遇到了问题。带有JsonObject的toJson(object)。使用java的fromObject()。util。日期
String jsonDat a= groovy.json.JsonOutput.toJson(contact)
Contact reloadContact = new Contact(net.sf.json.JSONObject.fromObject(jsonData))
在groovy 2.3中,使用本机方法实现这一点的正确方法是什么?
否则,我可以去另一个像格森这样的图书馆(http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/)
package test
import groovy.json.JsonOutput
import net.sf.json.JSONObject
class JsonTest {
public static void main(String[] args) {
JsonTest test = new JsonTest()
test.serialization()
}
public void serialization(){
Contact contact = new Contact()
contact.name = 'John'
contact.registration = Date.parse('dd/MM/yyyy', '20/10/2011')
String jsonData = JsonOutput.toJson(contact)
println(jsonData)
Object object = JSONObject.fromObject(jsonData)
Contact reloadContact = new Contact(object)
println(jsonData)
}
public class Contact{
String name
Date registration
}
}
编辑:我也尝试过使用JsonSlurper,但总是得到GroovyCastException:无法用类“java”强制转换对象“2011-10-19T22:00:00 0000”。lang.String“to class”java。util。“日期”包装测试
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
class JsonTest {
public static void main(String[] args) {
JsonTest test = new JsonTest()
test.serialization()
}
public void serialization(){
Contact contact = new Contact()
contact.name = 'John'
contact.registration = Date.parse('dd/MM/yyyy', '20/10/2011')
String jsonData = JsonOutput.toJson(contact)
println(jsonData)
JsonSlurper slurper = new JsonSlurper()
def object = slurper.parseText(jsonData)
Contact reloadContact = new Contact(object)
println(jsonData)
}
public class Contact{
String name
Date registration
}
}
工作环境很好。只是想更新一下,我使用了groovy 2.4.5,问题看起来已经解决了。
Book b = new Book(isbn:'dfjkad',quantity: 6, price: 5.00, title: "our mork book",
publishDate: Date.parse('dd/MM/yyyy', '20/10/2011'), publisher: "matt payne")
render JsonOutput.toJson(b)
输出
{"publishDate":"2011-10-20T04:00:00+0000","title":"our mork book","publisher":"matt payne","isbn":"dfjkad","price":5.00,"quantity":6,"author":null}
我找到了一个解决方法,但总体而言,Json(反)序列化在日期方面相当混乱。。。
虽然http://groovy-lang.org/json.html各州都支持java。util。日期仍然依赖于“旧”RFC 822“yyyy MM dd'HH:MM:ssZ”参见https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#timezone(Java 6.0及以下版本)
Java7.0引入了ISO 8601支持"yyyy-MM-dd'THH: mm: ss. SSSXXX"
这个虫子http://jira.codehaus.org/browse/GROOVY-6854仍然存在于Groovy 2.3.7中。此外,默认的JsonSlurper在默认情况下不会转换日期。似乎只有JsonParserLax和JsonFastParser关心日期解析,所以需要强制使用正确的解析器类型。
基于GROOVY-6854的当前解决方案:
public void serializationNative(){
Contact contact = new Contact()
contact.name = 'John'
contact.registration = Date.parse('dd/MM/yyyy', '20/10/2011')
def sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
sdf.setTimeZone(TimeZone.getTimeZone('UTC'))
JsonOutput.dateFormatter.set(sdf)
String jsonData = JsonOutput.toJson(contact)
println(jsonData)
JsonSlurper slurper = new JsonSlurper().setType( JsonParserType.INDEX_OVERLAY )
def object = slurper.parseText(jsonData)
Contact reloadContact = new Contact(object)
}
我希望JSON的(反)序列化约定将在即将发布的版本中得到实施。
为了完整性,我还尝试了其他库。以下是我的其他测试:
Boon 0.30在序列化Groovy对象(metaClass)时丢失,并抛出org.boon.Exceptions$SoftenedExctive的检测循环依赖项
public void serializationBoon(){
Contact contact = new Contact()
contact.name = 'John'
contact.registration = Date.parse('dd/MM/yyyy', '20/10/2011')
ObjectMapper mapper = JsonFactory.create()
String jsonData = mapper.toJson(contact)
println(jsonData)
Contact reloadContact = mapper.fromJson(jsonData, Contact.class)
}
Gson 2.3.1开箱即用,但序列化为本地日期格式:{“姓名”:“约翰”,“注册”:“2011年10月20日12:00:00 AM”}
public void serializationGson(){
Contact contact = new Contact()
contact.name = 'John'
contact.registration = Date.parse('dd/MM/yyyy', '20/10/2011')
Gson gson = new Gson()
String jsonData = gson.toJson(contact)
println(jsonData)
Contact reloadContact = gson.fromJson(jsonData, Contact.class)
println(jsonData)
}
Jackson 2.4.4开箱即用,但序列化为纪元毫秒格式:
{"name":"John","注册":1319061600000}
public void serializationJackson(){
Contact contact = new Contact()
contact.name = 'John'
contact.registration = Date.parse('dd/MM/yyyy', '20/10/2011')
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
String jsonData = mapper.writeValueAsString(contact)
println(jsonData)
Contact reloadContact = mapper.readValue(jsonData, Contact.class)
}
极速连连看是一个具备很多特色的小益智游戏,除了常见的连连看功能之外,还有以下特色: 1.共有 普通模式、挑战模式、联系模式三种模式 2.每一关图案摆放造型都不同,类似QQ游戏那种,但背景音乐各不相同 3.独创“上帝之手”解决死局问题 4.英雄榜记录 5.丰富的背景音乐等
1.自我介绍 2.string stringbuff stringbuilder区别 3.线程安全怎么理解 4.spring里面定义一个hashmap,线程安全吗 5.怎么解决 threadlocal线程封闭 6.线程池七大参数 7.具体策略有哪些 8.自己真的用线程池做了什么东西 9.mysql事务隔离级别 10.mysql锁有哪些 11.mysql执行计划有哪些种类(寄) 12.redis一般
BG :双非本大三 0,面试官很好,大概提前六分钟到腾讯会议,主动开摄像头,四十多分钟左右,难度较低。 1,20分钟项目。(√) 2,创建线程的方式。(√) 3,线程池参数,执行流程。(√) 4,Redis为什么这么快?IO多路复用技术介绍?(√) 5,Redis String结构底层原理?三种编码方式?(√) 6,select * from table where a = xx and b =
我有一个现有的2个kafka服务器加载了mysql连接器。它起作用了。此外,我需要添加MongoDB连接器。我已经在我的Kafka服务器(Centos7)上安装了confluent schema registry,它可以工作,我停止/启动/重新启动,看起来没有什么问题。我在这里下载并提取了debezium Mongo插件/usr/连接器/插件/debezium连接器mongodb/ 我编辑了 /e
代码片段如下所示: 如果有人有决议,请帮忙?
本文向大家介绍HTTP长连接、短连接?相关面试题,主要包含被问及HTTP长连接、短连接?时的应答技巧和注意事项,需要的朋友参考一下 在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个W