我应该如何编写一个方法签名,向服务器发出休息请求并返回openapi定义的反序列化主体和原始响应? [已关闭]

问题描述 投票:0回答:1

我应该如何编写一个方法签名,向服务器发出休息请求并返回 openapi 定义的反序列化主体和原始响应? openapi 规范操作对象位于:https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#operation-Object,其中定义了 请求主体对象定义请求正文和响应允许的数据类型(json 模式)的响应对象

我的目标是使用此处的答案自动生成 java 客户端代码,该代码包装从客户端调用的任何 openapi api 服务器 api。不应该实现反序列化,我只对以下方法签名感兴趣:

    确保方法输入满足openapi文档的约束
  • 确保方法的返回类型返回http响应和规范中定义的反序列化主体
  • 人们可能还想调用此方法并跳过正文反序列化,其中仅返回原始 http 响应
一些背景信息:

    对于任何输入请求内容类型,都有一个输入请求正文架构定义该内容类型的正文
  • 一个请求可以定义多种可能发送的请求正文内容类型
  • 一个响应可以定义多种可能返回的响应正文内容类型
  • 发送请求接受标头可以限制可以从端点发回的内容
  • 查询、标头、路径和 cookie 中的请求参数都可以具有相同名称的键,因此应将它们摄取到单独的映射中以防止冲突
java rest openapi code-generation
1个回答
0
投票
我对如何实现这一点的一些想法。

    使用单例类进行 true/false/contentType 输入,并具有相同名称的方法的不同实现。这类似于使用 python 的 Typing.Literal 类型,但是是在 Java 上下文中。
单身人士:

    真 -> 单例真
  • False -> SingletonFalse
  • 文本/纯文本 -> SingletonTextPlain
  • application/json -> SingletonApplicationJson
public ApiResponseWithDeserializationSkipped post( SingletonTrue: skipDeserilization, Object contentType, Object body) { // implementation } public ApiResponseForTextPlain post( SingletonFalse: skipDeserilization, SingletonTextPlain contentType, String body) { // implementation } public ApiResponseForApplicationJson post( SingletonFalse: skipDeserilization, SingletonApplicationJson contentType, Map<String, String> body) { // implementation }

  1. 对skipDeserilization + contentType 输入使用枚举。这要求我的输出类始终包含响应+正文,但该正文将是多种内容类型的类型对象。 所以主体返回类型信息是未知的,这不太好。

  2. 为每个content_type编写单独的方法,contentType+skipDeserilization不是输入

    没有反序列化的帖子
  • postForTextPlain
  • postForApplicationJson
    为每个 contentType 使用不同的正文参数名称
public ApiResponseWithDeserializationSkipped post( SingletonTrue: skipDeserilization, Object contentType, Object body) { // implementation } public ApiResponseForTextPlain post( SingletonFalse: skipDeserilization, SingletonTextPlain contentType, String textPlainBody) { // implementation } public ApiResponseForApplicationJson post( SingletonFalse: skipDeserilization, SingletonApplicationJson contentType, Map<String, String> applicationJsonBody) { // implementation }
    
© www.soinside.com 2019 - 2024. All rights reserved.