Недопустимый формат даты в почтовом запросе с использованием генерируемого кода swagger (открытый API)

Привет, я использую генератор кода swagger (v3) для создания клиента службы в моем проекте Spring Boot, используя следующую конфигурацию в моем pom.xml

<configuration>
    <language>java</language>
    <inputSpec>specs.yaml</inputSpec>
    <apiPackage>api</apiPackage>
    <modelPackage>model</modelPackage>
    <invokerPackage>invoker</invokerPackage>
    <generateApis>true</generateApis>
    <generateApiTests>false</generateApiTests>
    <generateApiDocumentation>false</generateApiDocumentation>
    <generateSupportingFiles>true</generateSupportingFiles>
    <generateModelDocumentation>false</generateModelDocumentation>
    <generateModelTests>false</generateModelTests>
    <typeMappings> 
        <typeMapping>DateTime=LocalDateTime</typeMapping>
        <typeMapping>Date=LocalDate</typeMapping>
    </typeMappings>
    <importMappings> 
        <importMapping>LocalDateTime=java.time.OffsetDateTime</importMapping>
        <importMapping>LocalDate=java.time.LocalDate</importMapping>
    </importMappings>
    <configOptions>
        <library>resttemplate</library>
        <interfaceOnly>true</interfaceOnly>
        <useTags>true</useTags>
        <useBeanValidation>true</useBeanValidation>
        <dateLibrary>java8</dateLibrary>
        <java8>true</java8>
        <sourceFolder>/<sourceFolder>
    </configOptions>

</configuration>

Проблема, с которой я столкнулся, связана с выполнением запроса POST через клиент Api, сгенерированный с помощью вышеуказанной конфигурации. POST-запрос выглядит так

{
    "name": "abc",
    "type": "xyz",
    "businessdata": {
        "currency": "INR",
        "startDate": [2020,5,28],
        "endDate": [2021,12,25],
        "code": "X123"
    },
    "seqnumber": "987"

}

Здесь startDate и endDate — это LocalDate в классе Java, и они также генерируются спецификациями Open Api. Здесь я не понимаю, почему он преобразуется в скобки [] и, следовательно, другая система, получающая этот запрос, выдает исключение с неверной датой.

Пожалуйста, дайте мне знать, как решить эту проблему, и объясните подробно, так как я новичок в генерировании кода swagger.


person aeroboy    schedule 29.05.2020    source источник
comment
Может помочь установка spring.jackson.serialization.write-dates-as-timestamps = false в свойствах приложения. Обычно это заставляет spring (т.е. jackson) сериализовать дату как строку даты ISO.   -  person Martin Hauner    schedule 31.05.2020


Ответы (2)


Я сделал то же самое в объекте ObjectMapper, передав его в resttemplate:

objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
person aeroboy    schedule 27.07.2020

Полное решение для обновления ObjectMapper во всех экземплярах RestTemplate:

@Configuration
public class RestTemplateConfiguration {

    @Bean
    public RestTemplate getRestClient() {
        RestTemplate template = new RestTemplate();
        template.getMessageConverters().stream()
            .filter(converter -> converter instanceof AbstractJackson2HttpMessageConverter)
            .map(converter -> (AbstractJackson2HttpMessageConverter) converter)
            .forEach(converter -> converter.getObjectMapper()
                .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
            );
        return template;
    }

}
person Martin    schedule 10.06.2021