到目前为止
我正在尝试使用官方指南和JSON启动和运行一个REST服务。我还添加了对OpenAPI的支持,用于测试本指南之后的服务。
这两个部分各自工作,服务正确地返回硬编码的演示数据。Swagger显示可用的路由并允许调用它们。
但是,它并不像我喜欢的那样光滑.
在这里,我创建了一个返回包含Instant的对象的路由。进行调用时,我被表示为属性的ISO 8601格式化字符串,正如我所期望的那样。
但是,属性的关联架构是
Instant:
type: object
properties:
nanos:
format: int32
type: integer
seconds:
format: int64
type: integer
epochSecond:
format: int64
type: integer
nano:
format: int32
type: integer这与实际返回的内容不一致。我有点明白它是从哪里来的。显然,quarkus-smallrye-openapi在检查Instant时使用的设置与quarkus-resteasy-jsonb使用的设置不同。
对于后者,我已经发现可以使用自定义JsonbAdapter来操作格式设置。例如:
public class JsonbInstantTypeAdapter implements JsonbAdapter<Instant, OffsetDateTime> {
@Override
public OffsetDateTime adaptToJson(Instant obj) {
return OffsetDateTime.ofInstant(obj, ZoneId.systemDefault());
}
@Override
public Instant adaptFromJson(OffsetDateTime obj) {
return obj.toInstant();
}
}
public class TestTimestamps {
@JsonbTypeAdapter(JsonbInstantTypeAdapter.class)
public Instant getDueTime() {
return Instant.now();
}
}这将导致Instant在转换成系统的时区后被序列化,这可以在调试时更容易读取。
我只能部分地想出如何调整模式。对该方法进行如下注释:
public class TestTimestamps {
@Schema(type = SchemaType.STRING, format = "date-time")
public Instant getDueTime() {
return Instant.now();
}
}结果生成一个适当的示例值,但生成的模式仍然知道它是瞬间生成的,因此它生成为
dueTime:
allOf:
- $ref: '#/components/schemas/Instant'
- format: date-time
type: string理想情况下,我不想单独地注释每个方法。
问题是
是否有一种方法可以将项目范围内的特定适配器配置为特定类型?是否有一种方法可以确保生成的OpenAPI模式实际上表示的是适应的类型而不是原始的类型?
https://stackoverflow.com/questions/61394407
复制相似问题