簡體   English   中英

如何在SwaggerUI中創建自定義POST請求主體

[英]How to create a custom POST request-body in SwaggerUI

我試圖讓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”

編輯

好的,我發現了為什么生成的響應主體是錯誤的,大搖大擺地通過查看公共參數和所有獲取器來確定請求主體的參數。 由於我的方法中不僅只有與參數相關的吸氣劑,因此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對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM