Я пытаюсь проверить, что мой контроллер реактивного отдыха передает правильные данные. Эти данные содержат поле ZonedDateTime
, которое мне нужно сохранить. Однако при запросе к контроллеру отдыха с помощью WebTestClient
моя проверка не выполняется, потому что полученное время внезапно оказывается в UT C.
@Data
public class SimpleData {
ZonedDateTime zdt;
}
@RestController
class SimpleDataController {
@Autowired SimpleDataService service;
@GetMapping("/simple")
List<SimpleData> getData() {
return service.getTimes();
}
}
@Service
class SimpleDataService {
public static final SimpleData DATA = new SimpleData();
static {
DATA.setZdt(ZonedDateTime.now(ZoneId.of("Europe/Berlin")));
}
public List<SimpleData> getTimes() {
return List.of(DATA);
}
}
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@ActiveProfiles("test")
class ApplicationTests {
@Test
void simpleDataTest() {
List<SimpleData> fromRest = WebTestClient.bindToServer().baseUrl("http://localhost:8080").build()
.get().uri("/simple").exchange()
.expectBodyList(SimpleData.class)
.returnResult().getResponseBody();
assertThat(fromRest).containsAll(Collections.singletonList(SimpleDataService.DATA));
}
}
Это не удается с
Ожидание ArrayList: <[SimpleData (zdt = 2020-08-05T09: 30: 40.291415300Z [UTC])]>, чтобы содержать: <[SimpleData (zdt = 2020-08-05T11: 30: 40.291415300 + 02: 00 [Европа / Берлин ])]>, но не смог найти следующие элементы: <[SimpleData (zdt = 2020-08-05T11: 30: 40.291415300 + 02: 00 [Europe / Berlin])]>
Само время правильное - разница часовых поясов вычтена из поля часа - но, очевидно, оно не равнозначно. Как ни странно, если вы запрашиваете URL-адрес с помощью клиента, JSON содержит правильные данные:
[{"zdt": "2020-08-05T11: 44: 10.4740259 + 02: 00 "}]
Кажется, это TestWebClient
преобразование времени.
Это задумано? Могу я как-нибудь изменить это поведение?