相关疑难解决方法(0)

日期格式映射到JSON Jackson

我有一个来自API的日期格式,如下所示:

"start_time": "2015-10-1 3:00 PM GMT+1:00"
Run Code Online (Sandbox Code Playgroud)

这是YYYY-DD-MM HH:MM am/pm GMT时间戳.我将此值映射到POJO中的Date变量.显然,它显示转换错误.

我想知道两件事:

  1. 我需要使用什么格式来与杰克逊进行转换?Date是一个很好的字段类型吗?
  2. 通常,有没有办法在变量被Jackson映射到Object成员之前处理变量?比如,更改格式,计算等.

java json date pojo jackson

133
推荐指数
6
解决办法
35万
查看次数

Spring Boot中的JSON Java 8 LocalDateTime格式

我在Spring Boot Application中格式化Java 8 LocalDateTime时遇到了一个小问题.使用"正常"日期我没有问题,但LocalDateTime字段转换为以下内容:

"startDate" : {
    "year" : 2010,
    "month" : "JANUARY",
    "dayOfMonth" : 1,
    "dayOfWeek" : "FRIDAY",
    "dayOfYear" : 1,
    "monthValue" : 1,
    "hour" : 2,
    "minute" : 2,
    "second" : 0,
    "nano" : 0,
    "chronology" : {
      "id" : "ISO",
      "calendarType" : "iso8601"
    }
  }
Run Code Online (Sandbox Code Playgroud)

虽然我想将其转换为:

"startDate": "2015-01-01"
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
    return startDate;
}
Run Code Online (Sandbox Code Playgroud)

但是上述任何一个注释都不起作用,日期会像上面那样被格式化.建议欢迎!

java json java-8 spring-boot java-time

98
推荐指数
9
解决办法
12万
查看次数

即使在添加 jackson-modules-java8 依赖项后也找不到 Jackson JavaTimeModule?

我正在尝试遵循JDK8 java.time 是否有 jackson 数据类型模块中给出的解决方案?(这是这个问题的原因,而不是重复)。

我加了

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-modules-java8</artifactId>
    <version>2.9.5</version>
    <type>pom</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但我仍然无法做到这一点:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Run Code Online (Sandbox Code Playgroud)

该JavaTimeModule班是无处可寻。我究竟做错了什么?

java jackson jackson-modules jackson-databind

4
推荐指数
1
解决办法
4817
查看次数

Spring Boot 无法反序列化包含 OffsetDateTime 的对象

我正在尝试调用一个休息端点,它返回一个 pojo 对象,如下所示:

public class Process   {
  @JsonProperty("id")
  private String id = null;

  @JsonProperty("processDefinitionId")
  private String processDefinitionId = null;

  @JsonProperty("businessKey")
  private String businessKey = null;

  @JsonProperty("startedAt")
  private OffsetDateTime startedAt = null;

  @JsonProperty("endedAt")
  private OffsetDateTime endedAt = null;

  @JsonProperty("durationInMs")
  private Integer durationInMs = null;

  @JsonProperty("startActivityDefinitionId")
  private String startActivityDefinitionId = null;

  @JsonProperty("endActivityDefinitionId")
  private String endActivityDefinitionId = null;

  @JsonProperty("startUserId")
  private String startUserId = null;

  @JsonProperty("deleteReason")
  private String deleteReason = null;

  //constructors and setters+getters
}
Run Code Online (Sandbox Code Playgroud)

这是调用:

ResponseEntity<Process> responseModel = restTemplate.exchange("http://localhost:8062/processes", HttpMethod.POST, httpEntity, Process.class);
Run Code Online (Sandbox Code Playgroud)

问题是我尝试了一些方法,例如忽略 …

java spring object mapper spring-boot

4
推荐指数
1
解决办法
5592
查看次数

通过 Jackson 序列化 java.sql.Date,同时考虑夏令时

我正在使用 ajava.sql.Date将日期字段存储在我的域对象之一中。该字段映射到 MySQLDATE列。当我尝试通过 Jackson 将此字段序列化为 JSON 时,Jackson 似乎没有考虑夏令时。

这是我的域对象中的字段的样子:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "EST")
private Date date;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,Jackson 已被指示将时区解释为 EST。我的 MySQL 数据库也使用 EST 时区:

SHOW VARIABLES LIKE '%zone';
Output:
system_time_zone | EST
time_zone        | SYSTEM
Run Code Online (Sandbox Code Playgroud)

我的问题是,对于夏令时开始和结束之间的日期,杰克逊返回的日期比数据库中存储的日期少一天。我假设这是因为杰克逊没有考虑夏令时。

我通过尝试在 Java 字段中将日期格式从 更改为yyyy-MM-dd来得出此结论。yyyy-MM-dd HH:mm:ss我注意到服务器返回了类似 的内容2017-03-13 00:00:00,但杰克逊将其序列化为2017-03-12 23:00:00(少一小时,这是 EST 时间受夏令时影响的时间)。

有什么办法可以克服这个问题吗?另外,java.sql.Date考虑到它没有时间对应项,使用的类型是否正确?我一直在考虑使用它java.time.LocalDate,但我还没有看到它是否会成功。

提前致谢!

java mysql date jackson

2
推荐指数
1
解决办法
3332
查看次数