Я пытаюсь выяснить, как настроить ObjectMapper внутри стандартных MessageConverters RestTemplate для сериализации Instants в виде строки формата ISO 8601 вместо числа.Я хотел бы избежать аннотирования каждого Момента в моих моделях.
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@PostMapping("/test")
public String get(@RequestBody String object) {
return object;
}
public String send(TestObject object) {
return new RestTemplateBuilder().rootUri("http://localhost:8080").defaultMessageConverters().build()
.exchange("/test", HttpMethod.POST, new HttpEntity<>(object, headers()), String.class).getBody();
}
private HttpHeaders headers() {
final HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
return httpHeaders;
}
@AllArgsConstructor
@Getter
@Setter
public static class TestObject {
private Instant test;
}
}
Я бы хотел, чтобы этот тест прошел, учитывая приведенный выше код
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@RunWith(SpringRunner.class)
public class InstantTest {
@Autowired
private DemoApplication client;
@Test
public void name() {
final String time = "2018-10-09T12:00:00.000Z";
final String response = client.send(new DemoApplication.TestObject(Instant.parse(time)));
assertThat(response).contains(time);
}
}
В этом примере используются Jackson 2.9.6 и Spring Boot 2.0.5.Я попытался
- Отключить WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS на автоматически настроенном ObjectMapper
- С помощью spring.jackson.serialization.write_date_timestamps_as_nanoseconds = false
- Предоставление пользовательского Jackson2ObjectMapperBuilder
Я явно что-то упускаю, так как это похоже на поведение по умолчанию или, по крайней мере, легко настраиваемое.