TimeZone与SpringBoot

时间:2016-06-15 19:36:02

标签: java spring-boot

我Usig SpringBoot并尝试将此返回转换为我的对象

...
{
      "data": "2015-05-29",
      "codigo": 618393,
      "apresentante": null,
      "total": 6,
      "desconto": 0,
      "pago": 6
    },
...

所以我有一个

的对象
private Date data;

我有一个SimpleDateFormat:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
System.out.println(sdf.format(myObjet.getData()));

并打印

28/05/2015,但正确的是2015年5月29日

我的application.properties有以下几行:

spring.jackson.date-format=yyyy-MM-dd
spring.jackson.time-zone=America/Sao_Paulo

有谁知道为什么会这样? TKS

1 个答案:

答案 0 :(得分:0)

首先,您怀疑Jackson配置会干扰SimpleDateFormat的解析/格式化,但这是错误的:尽管Jackson使用SimpleDateFormat来解析/格式化代码,但是{{1 }}不会影响您在应用程序中创建的每个spring.jackson.*实例。这是两件事。

您必须使用SimpleDateFormatObjectMapper来使用某些上下文配置;尽管我怀疑,我发现@Autowired的配置不会影响json / Date的解析/格式化结果,即 Jackson内部没有在序列化/反序列化中使用此值。 < / p>

我的结论是,当我们设置spring.jackson.time-zone时,spring.jackson.time-zonemapper.setTimezone()都不会影响(反)序列化中时区转换的处理;后者似乎超越了前两个;并且,转换时应用程序的默认时区将是“目标”时区。

我建议您附上另一个简短而完整的测试用例,以说明什么是有效的,什么是无效的。

检查我的这项测试,然后尝试发布完整的测试,如下所示:

@JsonFormat(timezone = "xxx")

请务必从简单的测试开始,并逐步向其中添加更多变量。