我有SpringBoot Java(服务器存根)代码从我在SwaggerHub中编码的YAML API定义文件生成。我使用Open API 3。
我不能让这个生成的代码工作,似乎相当错误。
我无法修复的错误是:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: io.swagger.v3.oas.models.OpenAPI["components"]->io.swagger.v3.oas.models.Components["schemas"]->java.util.TreeMap["CancelData"]->io.swagger.v3.oas.models.media.ObjectSchema["properties"]->java.util.TreeMap["dateStamp"]->io.swagger.v3.oas.models.media.DateTimeSchema["example"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.13.1.jar!/:2.13.1]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300) ~[jackson-databind-2.13.1.jar!/:2.13.1]
at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35) ~[jackson-databind-2.13.1.jar!/:2.13.1]
我得到它时,我git的API文档的URL。SwaggerDocumentationConfig
我尝试了所有我能在网上找到的建议,但没有任何帮助。
我认为这与我的YAML文件中的这个字段有关。
dateStamp:
type: string
format: date-time
description: The creation date and time of this cancel transaction
example: "2022-01-28T05:03:57Z"
我试着注册JavaTimeModule和所有在网上建议的。我不明白这个错误。我不知道即使我把它放在正确的地方。但这是我尝试修复。
@Bean
ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
return objectMapper;
}
我把它放在SwaggerDocumentationConfig
里了。
总的来说,我不明白为什么这个生成的代码是如此的bug。
https://github.com/FasterXML/jackson-modules-java8/issues/219
serialize/deserialize java 8 java.time with Jackson JSON mapper
我该如何解决这个问题?
2条答案
按热度按时间vlju58qv1#
今天早些时候,我遇到了类似的问题。
其中建议增加
我是用这个来做的
然后,在创建
ObjectMapper
时,您可以执行替换操作与
qvtsj1bj2#
@BeanObjectMapper不工作的原因是swagger不使用Spring上下文bean,而是作为一个单例静态地自己启动Map器。因此,您可以通过调用以下命令获得此Map器并根据需要对其进行配置:
请在swagger bean初始化之前执行此操作。