java - Jayway JsonPath读取长Java

标签 java json spring-boot jsonpath

在 JSON 中,我收到一个 unix 时间戳:

{
  "order": {
    "date": 1531380888
  }
}

我想将此值读入long,以便我可以用它创建一个 Date 对象:

Configuration conf = Configuration.builder().mappingProvider(new JacksonMappingProvider())
    .jsonProvider(new JacksonJsonProvider()).build();
Object rawJson = conf.jsonProvider().parse(payload);
Long orderDate = JsonPath.read(rawJson, "$.order.date");

但是 JSONPath 坚持认为这个 Integer 不能转换为 long:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

有没有办法用 Jsonpath 读取 Long,或者自动将这个 unix 时间戳转换为 Java 日期对象?

进口:

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;

整数问题:最大值为 2147483647,即 2038 年 1 月 19 日星期二凌晨 3:14:07 GMT。不能使用 Integer 作为 unix 时间戳。 谢谢。

最佳答案

您可以配置 JsonPath 使用的 ObjectMapper 将整数视为长整型。这将确保所有整数值(和长整型值)都以长整型形式返回。

这是一个例子:

String payload = "{\"order\": { \"date\": 1531380888 } }";

ObjectMapper objectMapper = new ObjectMapper().configure(DeserializationFeature.USE_LONG_FOR_INTS, true);

Configuration conf = Configuration.builder()
    .jsonProvider(new JacksonJsonProvider(objectMapper))
    .build();
Object rawJson = conf.jsonProvider().parse(payload);
Long orderDate = JsonPath.read(rawJson, "$.order.date");

assertThat(orderDate, is(1531380888L));

关于java - Jayway JsonPath读取长Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51300567/

相关文章:

java - 如何在 JEditorPane 中设置 html 的超时

c# - 将属性子对象移动到根

java - Jersey 应用程序 404 未找到错误

java - 在 Linux 系统上安装 Spring Boot 应用程序

java - 当我从 crudrepository 更改为 pagingand sortingrepository 时,没有保存方法

java - Websphere : ClassCastException for Webservice

java - Java 中的标记接口(interface)

java - XMLEncoder 拒绝写入文件

ios - 在 Swift 3 中将 JSON 对象解析为 NSArray

spring-boot - 代理设置不适用于 Spring WebClient