gpt4 book ai didi

java - 如何在 SwaggerUI 中创建自定义 POST 请求正文

转载 作者:行者123 更新时间:2023-11-30 05:44:20 25 4
gpt4 key购买 nike

我正在尝试让 SwaggerUI 看起来对我来说正常工作。我有一堆 POST 方法,SwaggerUI 确实已经在 Web-UI 中生成响应和请求正文,但是请求正文不正确。如何为我的 POST 方法创建自定义请求正文?

SpringFoxConfig

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMethod;

import com.google.common.collect.ImmutableList;

import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ResponseMessage;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SpringFoxConfig {
@Bean
public Docket apiDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
//.globalResponseMessage(RequestMethod.POST, ImmutableList.of(new ResponseMessage(200, "Some global OK message",null)))
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.apiInfo(getApiInfo());
}

private ApiInfo getApiInfo() {
return new ApiInfo("RESTlike API",
"An Api to call functions",
"",
"",
"",
"",
"");
}
}

例如UI 中显示的架构为

{
"da": "MD5",
"data": {
"value": [
"string"
]
}
}

这不是正确的输入,并且会引发错误。本例中的正确输入为:

{
"da": "MD5",
"data": "String"
}

架构的数据来自哪里以及如何更改/覆盖它。

相应的方法

@ResponseBody
@PostMapping("/digest")
public StringWrapper digestData(@RequestBody DigestDataContainer params) throws IOException {
return new StringWrapper(//code);
}

DigestDataContainer 仅包含一个字节数组“data”和一个枚举“da”

编辑

好吧,我发现为什么生成的响应体是错误的,swagger通过查看公共(public)参数和所有 getter来确定请求体的参数。由于我的方法中不仅有与参数相关的 getter,因此 UI 中显示了太多内容。您可以通过使用注释来防止参数显示在 UI 中

@ApiModelProperty(required = false, hidden = true)

但是,我的每个方法都没有唯一的主体,我对其中的一些方法进行了分组,这导致 UI 中生成的请求主体与它所在的方法不准确。因此我想要在 UI 中根本不显示正文。

  • 有办法禁用请求的模型架构吗?

最佳答案

最简单的(对我来说)方法是使用 DTO 对象。

在您的情况下,而不是您的 digestData(@RequestBody DigestDataContainer params) 只需使用方法

@ResponseBody
@PostMapping("/digest")
public StringWrapper digestData(@RequestBody DigestDataContainerDTO ddcDTO) throws IOException {

DigestDataContainer ddc = new DigestDataContainer(ddcDTO);

// process your DigestDataContainer object as before
}

其中 DigestDataContainerDTO

public class DigestDataContainerDTO {
private String da;
private String data;
// getters/setters
}

DigestDataContainer(ddcDTO)DigestDataContainerDTO 的字段构建 DigestDataContainer 对象。

关于java - 如何在 SwaggerUI 中创建自定义 POST 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55104673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com