当前位置: 首页 > 知识库问答 >
问题:

OpenAPI(Swagger-UI)-仅某些API的必填字段

田永春
2023-03-14

我目前正在Spring Boot应用程序中使用OpenAPI 3(Swigger UI),我想知道如果我对所有API都使用相同的Java模型类,如何只为某些API指定某个字段是必需的/可选的。

这是我的样本:

@Getter
@Setter
@Accessors(chain = true)
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class UserRequest {
  @NotEmpty(message = "{constraints.NotEmpty.message}")
  private String username;
  @NotEmpty(message = "{constraints.NotEmpty.message}")
  private String password;
  @NotEmpty(message = "{constraints.NotEmpty.message}")
  private String cookie;
  @NotEmpty(message = "{constraints.NotEmpty.message}")
  private String csrfToken;
}

这个类被用作几个API的输入请求,但只有其中一些API会要求这些字段都是必需的(即“密码”字段仅对登录API是必需的,而对注销API不是必需的)。

有没有一种方法可以使用OpenAPI的注释来突出显示需要的API所需的字段?

提前谢谢你的帮助。

早上好。

共有1个答案

胥英奕
2023-03-14

我认为,在这个类中,您将无法指定参数是强制的还是非强制的,有些选项是在API定义中执行(特别是强制参数),或者,如果从主体中检索该类,则创建验证服务来验证字段值,甚至使用DTO隐藏您不想设置的字段并指定强制的字段,在此选项中,mapstruct将非常有用。https://mapstruct.org/

我希望这有助于,问候!

编辑:这里是一些DTO信息什么是数据传输对象(DTO)?

 类似资料:
  • 我使用OpenAPI 3.0和Spring Boot5,因此没有配置YAML。我有一个包含客户端标识ID的标头(这不是一个身份验证标头)。我想把它作为一个强制性的标头参数。添加在OpenAPI配置下面 但是,swagger UI不会在任何API中显示所需的参数。有人能帮我解释一下我做错了什么吗?

  • 当我访问我的Swagger UIendpoint时,我会看到这个服务的记录良好的条目,包括关于和参数的信息。现在,我试图以类似的方式创建和方法,但遇到了一个问题。 由于我的/请求包含许多表单参数,所以我将它们封装到一个对象中,并用注释该方法。我的表单对象如下所示: 我的方法如下所示: 什么也没做。我尝试将方法签名更改为如下所示: 还是什么都没有。我的问题是,是否有一种方法可以让OpenAPI/Sw

  • REST API请求:EmployeeRequest。java id、名称、sal、位置-- 员工负责。java id、名称、sal、位置-- /api/employee 我不想在回复中使用除ID以外的其他字段 实际:`{id:“123”,“name:“null”,“sal:“null”,“location:“null”}但我只想要response id,而不是POST response的其他字段

  • 我正在使用Springdoc来记录我在Spring Boot中制作的REST API。我需要从Swagger UI的模式部分隐藏一些模型/模式,这些模型/模式只在应用编程接口内部使用,所以没有必要在模式部分显示它们。 这是我试图隐藏的模型之一: 上图所示模型的超类: 这些示例中的大多数注释都来自JPA或Lombok。需要明确的是:在Schemas部分不可见–我在这里包括它只是为了以防万一。 到目前

  • 当使用与SpringDoc-OpenAPI捆绑的CSRF头时,是否有一种方法可以自动地将CSRF头包含到从swagger ui发出的请求中? springfox(GitHub)中似乎实现了类似的解决方案,但我没有找到关于是否可以用SpringDoc-OpenAPI实现这一点的信息。

  • 问题内容: 我正在使用Elasticsearch索引我的文档。 是否有可能指示它仅返回特定字段,而不是它存储的整个json文档? 问题答案: 是的 使用源过滤器。如果您使用JSON搜索,它将看起来像这样: 在ES 2.4及更低版本中,您还可以在search API中 使用fields选项: ES 5+中已弃用此功能。而且,源过滤器更强大!