草庐IT

Serialization

全部标签

java - 如何使用 jackson 序列化 transient 场?

我们使用Jackson的JSON序列化来公开系统的内部状态以调试属性。默认情况下,jackson不会序列化transient字段-但我也希望序列化它们。如何序列化这些字段?我知道的一种方法是为这些字段提供setter/getter-但我不想这样做,因为我有一些我不想被调用的getX方法(例如,有一些setter/getter改变对象状态)。我知道我可以创建注释,但我真的想避免它。所以我的问题是:有没有办法设置jackson序列化所有对象字段?包括短暂的。 最佳答案 我使用Jackson2.4.3的解决方案:privatestatic

java - 是否有可能在运行时获取java类的serialVersionUID

众所周知,如果您未能显式定义它,运行时将为您的类生成serialVersionUID字段。但是有没有可能在runitme中得到这个值呢?是否有可能在运行时,引用.class,获取它的serialVersionUID? 最佳答案 Integeri=newInteger(5);longserialVersionID=ObjectStreamClass.lookup(i.getClass()).getSerialVersionUID();以上是在运行时获取类的序列版本号的示例代码。 关于jav

java - Jackson JSON 在序列化之前修改对象

我想在对象被序列化之前修改它。我想编写一个自定义序列化程序来解析对象,然后将其传递给默认对象序列化程序。这是我的:importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.fasterxml.jackson.databind.SerializerProvider;importjava.io.IOException;/

java - Jackson 使用 Enum Key 和 POJO Value 反序列化为 Map

我正在尝试使用Jackson将JSON反序列化为JavaPOJO。在不泄露secret信息的情况下,以下是ObjectMapper反序列化失败时的堆栈跟踪示例:org.codehaus.jackson.map.JsonMappingException:CannotconstructMapkeyoftypecom.example.MyEnumfromString"coins":notavalidrepresentation:CannotconstructMapkeyoftypecom.example.MyEnumfromString"coins":notoneofvaluesforEnu

java - 我应该使用 POJO 还是 JSONObject 进行 REST 调用

最近我偶然发现我的新团队大量使用JsonObject进行剩余数据交换的情况。他们的观点是,在使用pojo时,我们与其余服务紧密绑定(bind),而jsonObject提供了自由。它还避免了不必要的数据序列化,同时大大减少了类的数量。我有几点遇到他们:Pojo赋予数据更多意义,我们保存的数据具有正确的数据类型。如果我们只需要json的10个字段中的2个字段,我们可以用@JsonIgnore反序列化为2个字段类我不太清楚反序列化的成本,但不知何故我觉得应该不会有太大区别。有人可以帮助我了解哪种观点是可行的吗?请提供一些使用POJO和JSONObject的优缺点。谢谢

java - 在 Java 中序列化日期

我通过Web服务传递一些对象,其中一些包含java.sql.Date。因为Date没有空的构造函数,所以它不想被序列化。问题的第一部分很简单:在客户端和服务之间传递日期的最佳方式是什么?第二部分有点棘手:一旦我决定如何传递日期,我显然可以声明datetransient并制作一些包装类以将日期作为String或其他任何形式传递,但是如何尽可能透明地将相同的解决方案应用于多个类包括日期?(我预感DynamicProxythingy可能是一个解决方案,但阅读Sun网站上的文档并不是很有帮助,所以如果它真的是那个方向的东西,一些澄清将不胜感激)编辑:我问错了问题,抱歉(我和同事之间的一些误解实

java - 使用输出流序列化对象

假设我有一个OutputStream(而不是ObjectOutputStream)。是否可以使用write方法发送序列化对象?谢谢! 最佳答案 下面是序列化对象的操作:newObjectOutputStream(outputStream).writeObject(obj);如果你想控制byte[]输出:ByteArrayOutputStreambuffer=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(buffer);oos.writeO

java - 根据 GSON 中的值从序列化中排除某些字段

我将GSON用于我的序列化目的,我没有找到一种方法从基于字段值的Gson提供的ExclusionStrategy类的序列化中排除某些字段,因为它只支持顶级类或基于字段属性的排除.字段属性不包括该字段的值。所以我该怎么做? 最佳答案 实现此目的的方法是为相关类创建自定义序列化程序。在允许Gson以默认方式创建JSON对象后,根据其值删除要排除的属性。publicclassSerializerForMyClassimplementsJsonSerializer{@OverridepublicJsonElementserialize(My

Java Thread Serialization,为什么序列化的Thread Object可以启动

java中的线程在Java中是不能重启的,所以我自己实现了一个javaThread,然后在得到Thread的序列化对象后尝试重启线程。importjava.io.Serializable;publicclassThreadSerializationextendsThreadimplementsSerializable{intiCheck=10;@Overridepublicvoidrun(){System.out.println("STARTING");for(inti=0;i和序列化算法-publicclassCallingThreadSerializable{publicstati

java - Jackson 使用时间戳字段反序列化 JSON

我有这样的字符串:{"debug":"false","switchTime":"2017-04-1217:04:42.896026"}我正在尝试以这种方式获取对象:newObjectMapper().readValue(string,MyObject.class);和MyObject类:classMyObject{privateBooleandebug;privateTimestampswitchTime;//...getters,setters,constructors}我有这样的异常(exception):com.fasterxml.jackson.databind.exc.Inv