gpt4 book ai didi

json - SpringBoot RestTemplate 忽略 spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false

转载 作者:行者123 更新时间:2023-12-04 22:55:52 27 4
gpt4 key购买 nike

我正在使用 OffsetDateTime 对象。

我想以 ISO 格式输出这种类型,所以我已将上述属性添加到我的 application.yml 中,当我在 Controller 中使用它时它工作正常。

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Schedule
{
private OffsetDateTime time;
private String mode;
}

在我的 Controller 中使用:
public ResponseEntity taskManagerTest() {
Schedule bpTaskManagerRequest = new Schedule();

return ResponseEntity.status(HttpStatus.CREATED).headers(null).body(bpTaskManagerRequest);
}

我返回对象时的示例结果:
{
"time": "2017-11-12T15:03:05.171Z",
"mode": "eSetTime"
}

但是,如果我使用相同的对象在 Spring 服务中使用 RestTemplate 进一步发送它:
    HttpEntity<Schedule> httpEntity = new HttpEntity<>(bpTaskManagerRequest, headers);

ResponseEntity<String> answer = restTemplate.exchange(bpTaskManagerURL, HttpMethod.POST, httpEntity,
String.class);

它被序列化为:
{
"time": 1510498985.171000000,
"mode": "eSetTime"
}

我的 RestTemplate 定义为:
@Autowired
private RestTemplate restTemplate;

application.yml 片段:
spring:
jackson:
serialization:
write-dates-as-timestamps: false

build.gradle 片段:
buildscript {
ext {
springBootVersion = '1.5.4.RELEASE'
ext.kotlin_version = '1.1.51'
}
}
compile('com.fasterxml.jackson.module:jackson-module-parameter-names')
compile('com.fasterxml.jackson.datatype:jackson-datatype-jdk8')
compile('com.fasterxml.jackson.datatype:jackson-datatype-jsr310')

示例项目: https://github.com/deepres/OffsetDateTime-with-RestTemplate

最佳答案

您的应用程序正在创建自己的 RestTemplate bean 并且不对它应用任何定制。这意味着它将使用默认消息转换器和默认 Jackson 配置,而不是 Spring Boot 配置的任何内容。

described in the reference documentation , Spring Boot 提供了 RestTemplateBuilder可用于创建 RestTemplate .它“将确保将合理的 HttpMessageConverters 应用于 RestTemplate 实例”。您可以通过更改 WebConfiguration 来更新您的示例以使用它到以下几点:

package com.example.demo;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.boot.web.client.RestTemplateBuilder;

@Configuration
public class WebConfiguration {

@Bean
public RestTemplate getRestTemplate(RestTemplateBuilder builder) {
return builder.build();
}

}

有了这个改变,转换现在是一致的:
2017-11-17 12:35:02.892  INFO 28527 --- [nio-8080-exec-2] com.example.demo.ExampleController       : Rest template: {"label":"test from controller","time":"2017-11-17T12:35:02.821Z"}
2017-11-17 12:35:02.905 INFO 28527 --- [nio-8080-exec-1] com.example.demo.DemoService : Object mapper:{"label":"test from controller","time":"2017-11-17T12:35:02.821Z"}

关于json - SpringBoot RestTemplate 忽略 spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47222956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com