JHipster + swagger: строка в LocalDate не работает в интеграционных тестах - PullRequest
0 голосов
/ 25 января 2019

Создайте приложение для микро-сервиса с помощью jhipster.Одна из конечных точек принимает LocalDate в качестве параметра запроса.

При тестировании этой службы с использованием шлюза она работает нормально.Абсолютно никаких проблем.

Но я сделал интеграционный тест, и там он не будет работать:

2019-01-24 16: 46: 37.050 WARN 21145 --- [main] .wsmsDefaultHandlerExceptionResolver: Устранено исключение, вызванное выполнением обработчика: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: не удалось преобразовать значение типа «java.lang.String» в требуемый тип «java.time.LocalDate»;вложенным исключением является org.springframework.core.convert.ConversionFailedException: не удалось преобразовать тип [java.lang.String] в тип [@ io.swagger.annotations.ApiParam @ javax.validation.Valid @ org.springframework.web.bind.annotation.RequestParam java.time.LocalDate] для значения '2019-01-01';вложенное исключение - java.lang.IllegalArgumentException: попытка разбора не удалась для значения [2019-01-24]

Контроллер сгенерирован, поскольку я сделал его «api-first».Вот определение параметра даты:

-
    name: fromDate
    in: query
    description: "blablabla"
    required: false
    schema:
        format: date
        type: string

Вот как выглядит мой тест:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = FooBarServiceApp.class)
public class FooBarApiDelegateImplIntTest {

private MockMvc mockMvc;

    @Autowired
    FooBarApiController controller;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders
            .standaloneSetup(controller)
            .build();
    }

    @Test
    @Transactional
    public void test() throws Exception {
        LocalDate now = LocalDate.now();

        mockMvc.perform(get("/api/fooBar").param("fromDate", "2019-01-01"))
        .andExpect(status().isOk())
        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
        .andExpect(jsonPath("$").isArray())
        .andExpect(jsonPath("$", hasSize(1)))
        .andReturn();
    }
}

FooBarController - это сгенерированный контроллер, и часть, которая объявляет конечную точку, выглядит следующим образом:

default ResponseEntity<List<FooBar>> getFooBar(@ApiParam(value = " blablabla") @Valid @RequestParam(value = "fromDate", required = false) LocalDate fromDate);

Если я добавлю DateTimeFormat к этому коду:

default ResponseEntity<List<FooBar>> getFooBar(@ApiParam(value = " blablabla") @Valid @RequestParam(value = "fromDate", required = false)  @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fromDate);

Тогда мой тест работает отлично.Очевидно, что я не могу вручную изменить сгенерированный код, поэтому альтернатива, которую я вижу, состоит в том, чтобы объявить мой параметр как простую строку в API, а затем преобразовать его сам в FooBarApiDelegateImpl.

Но так как он работаетза пределами интеграционного теста я постоянно говорю себе, что в моем тесте должно быть какое-то объяснение, а также какой-то способ настройки преобразования даты.

Кто-нибудь?

Обновление: я понизил версию своего файлаот использования openApi 3 до openApi 2 (чванство).Такое же поведение, так что это не проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...