我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
答案 0 :(得分:0)
首先,您怀疑Jackson配置会干扰SimpleDateFormat
的解析/格式化,但这是错误的:尽管Jackson使用SimpleDateFormat
来解析/格式化代码,但是{{1 }}不会影响您在应用程序中创建的每个spring.jackson.*
实例。这是两件事。
您必须使用SimpleDateFormat
和ObjectMapper
来使用某些上下文配置;尽管我怀疑,我发现@Autowired
的配置不会影响json / Date的解析/格式化结果,即 Jackson内部没有在序列化/反序列化中使用此值。 < / p>
我的结论是,当我们设置spring.jackson.time-zone
时,spring.jackson.time-zone
或mapper.setTimezone()
都不会影响(反)序列化中时区转换的处理;后者似乎超越了前两个;并且,转换时应用程序的默认时区将是“目标”时区。
我建议您附上另一个简短而完整的测试用例,以说明什么是有效的,什么是无效的。
检查我的这项测试,然后尝试发布完整的测试,如下所示:
@JsonFormat(timezone = "xxx")
请务必从简单的测试开始,并逐步向其中添加更多变量。