2 回答
TA贡献1835条经验 获得超7个赞
我记得旧版本的spring没有这个问题(或者我很幸运)但这就是我在Spring boot 2.1.7.RELEASE中解决它的方法:
首先,添加Jackson 的支持模块以支持 Java 8 功能(TimeDate API)
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
然后在 Spring 中注册一个带有自定义配置(以支持 Java 8)的默认 ObjectMapper bean。
@Bean
@Primary
public ObjectMapper geObjMapper(){
return new ObjectMapper()
.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());
}
注意:@Primary 用作预防措施,因此如果类路径上有其他 ObjectsMapper bean,spring 将默认选择这个。
TA贡献1831条经验 获得超4个赞
您编写的解决方案是正确的方法。其他方法如下所述。公共类 LocalDateTimeSerializer 实现 JsonSerializer { @Override public JsonElement serialize(LocalDateTime localDateTime, Type type, JsonSerializationContext jsonSerializationContext) { Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); 日期日期 = Date.from(instant); 返回新的 JsonPrimitive(date.getTime()); } }
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer());
Gson gson = gsonBuilder.create();
另一种方法。无论如何试试这个。尝试将日期时间格式更改为字符串。“2011-04-08T09:00:00”。nano 和其他格式非常复杂,我无法从你 lastseen json 中看出你到底在说什么日期时间。它也错过了时区,因此您的本地时间可以在您部署解决方案的任何地方,如果您在 3 个不同的时区机器上部署本地时间是不正确的。使用此字符串格式或制作您自己的“2011-04-08T09:00:00”
public class CustomJsonDateDeserializer extends JsonDeserializer<Date>
{
@Override
public Date deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
添加回答
举报
