- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想我一定是误解了 Zones 在 java 的 ZonedDateTime 类中是如何工作的。当我使用 Jackson 序列化然后反序列化 now() 时,反序列化值具有 getZone() == "UTC"而不是序列化值中的 "Z"。谁能向我解释为什么会这样以及我应该怎么做?
下面的代码打印:
{"t":"2017-11-24T18:00:08.425Z"}
Data [t=2017-11-24T18:00:08.425Z]
Data [t=2017-11-24T18:00:08.425Z[UTC]]
Z
UTC
Java 源代码:
<!-- language: java -->
package model;
import static org.junit.Assert.*;
import java.io.IOException;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import org.junit.Test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class ZonedDateTimeSerializationTest {
static public class Data {
@Override
public String toString() {
return "Data [t=" + t + "]";
}
public ZonedDateTime getT() {
return t;
}
public void setT(ZonedDateTime t) {
this.t = t;
}
ZonedDateTime t = ZonedDateTime.now(ZoneOffset.UTC);
};
@Test
public void testDeSer() throws IOException {
Data d = new Data();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
String serialized = objectMapper.writer()
.without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.writeValueAsString(d);
System.out.println(serialized);
Data d2 = objectMapper.readValue(serialized, Data.class);
System.out.println(d);
System.out.println(d2);
System.out.println(d.getT().getZone());
System.out.println(d2.getT().getZone());
// this fails
assertEquals(d, d2);
}
}
最佳答案
默认情况下,在 ZonedDateTime
的反序列化过程中,Jackson 会将解析的时区调整为上下文提供的时区。您可以使用此设置修改此行为,以便解析的 ZonedDateTime
将保持在 Z
:
objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
更多详情 here
关于java - 为什么 Jackson 的默认解串器将 Zone 设置为 UTC 而不是 Z?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47478259/
我有一个这样的对象: "choice": { "000": { "id": "001", "label": "test",
我正在使用aerospike的java客户端。我希望更改 aerospike 用于 java 对象的序列化程序,即 java 序列化程序。 我打算使用其他更快的序列化库,例如PROTOSTOFF/AV
我有一个奇怪的问题,我有一个 HashMap,我将其序列化以供以后在磁盘上使用。 这是一个HashMap ConverterMetadata是我编写的用于跟踪音乐文件元数据的自定义类。 Convert
这是我的类(省略 getter 和 setter): public class ClassWithAMap { @JsonProperty("map") @JsonDeserializ
我在 python spark 应用程序中创建了一个 kafka 流,可以解析通过它的任何文本。 kafkaStream = KafkaUtils.createStream(s
我正在尝试将一些 Json 解析为 Java 对象。 有些字段需要自定义行为,所以我尝试在构造函数上使用 @JsonCreator。 好吧,它可以工作,但是对于使用 @JsonProperty 注释的
据我了解,DS.FixtureAdapter 默认情况下不使用序列化器。这是正确的吗? 我主要尝试使用夹具适配器进行自定义转换。我看到 DS.JSONSerializer 调用转换 here 的反序列
我正在使用 etaty rediscala (1.4.2) 连接到 Play 2.4 中的 Redis。我的代码如下: override def getMember(token: String): F
我将事件的有效负载作为 JSON 字符串保存到数据库中。为了在代码中只有一种版本的事件,同时仍然能够读取旧事件,我想在反序列化之前“向上转换”序列化数据。 我想到了这样的事情: public Obje
我正在使用一个总是这样响应的 API: { "stuff_i_need": [ { "title": "Hello" }, { "title":
我是一名优秀的程序员,十分优秀!