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"
}
这里的startDate和endDate是LocalDate在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;
}
}
您好,我正在使用 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"
}
这里的startDate和endDate是LocalDate在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;
}
}