Post 请求中使用 swagger 代码生成的无效日期格式(打开 api)

Invalid Date format in Post request using swagger code gen (open api)

您好,我正在使用 swagger code gen (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>

我面临的问题是在通过上述配置生成的 Api 客户端执行 POST 请求时。 POST 请求看起来像

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

}

这里的startDateendDateLocalDate在Javaclass 并且这些也是由 Open Api 规范生成的。在这里,我不明白为什么它要转换为 括号 [],因此 接收此请求的其他系统抛出无效日期异常 .

请让我知道如何解决这个问题并详细解释,因为我是 swagger 代码生成的新手。

我在 ObjectMapper 对象中做了同样的事情,同时将它传递给 resttemplate:

objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)

在所有 RestTemplate 个实例中更新 ObjectMapper 的完整解决方案:

@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;
    }

}