Swagger не может найти модель без @RequestBody в почтовом запросе - PullRequest
1 голос
/ 15 января 2020

Я использую Springboot с Swagger в моем проекте. Я создал такой метод записи:

@RequestMapping("/ufile")
@Api(value = "文件服务", tags = {"文件服务"})
public class UfileController extends BaseApiController {

    private static final Logger logger = LoggerFactory.getLogger(UfileController.class);

    @ApiOperation(value = "文件上传", response = ApiResponse.class)
    @PostMapping(value = "/upload", produces = "application/json;charset=utf-8")
    public ApiResponse upload(@Valid @RequestBody UploadRequest uploadRequest, @ApiIgnore HttpServletResponse response
            , @RequestParam(value = "protocol", defaultValue = "thrift", required = false) @ApiIgnore String protocol) {
           .......
    }
}

Я использовал @RequestBody в модели UploadRequest в приведенном выше коде. И это модель UploadRequest :

@Data
@ApiModel("文件上传请求")
public class UploadRequest extends BaseRequest {

    @ApiModelProperty(value = "上传的文件", name = "上传的文件")
    @NotEmpty
    private MultipartFile[] multipartFiles;

    @ApiModelProperty(value = "租户id", name = "租户id")
    @NotBlank
    private String tenantId;

    @ApiModelProperty(value = "图片是否需要对应水印图片", name = "图片是否需要对应水印图片")
    private boolean needWaterMark;
}

Swagger хорошо работает в этой сцене, он находит ApiModel UploadRequest , и когда я посещаю Swagger-UI. html .Я вижу, что: enter image description here

Но когда я не использую @RequestBody в модели UploadRequest, swagger не может найти UploadRequest . Когда я Посетите Swagger-UI, нет UploadRequest в Модель метка. enter image description here

Что я хочу, так это когда я изменяю свой код следующим образом:

@RestController
@RequestMapping("/ufile")
@Api(value = "文件服务", tags = {"文件服务"})
public class UfileController extends BaseApiController {

    private static final Logger logger = LoggerFactory.getLogger(UfileController.class);

    @ApiOperation(value = "文件上传", response = ApiResponse.class)
    @PostMapping(value = "/upload", produces = "application/json;charset=utf-8")
    public ApiResponse upload(@Valid UploadRequest uploadRequest, @ApiIgnore HttpServletResponse response
            , @RequestParam(value = "protocol", defaultValue = "thrift", required = false) @ApiIgnore String protocol) {

    }
}

swagger все еще может найти ApiModel UploadRequest.when, когда я посещаю swagger-ui. html, этикетка Модель содержит UploadRequest.

Кто может мне помочь, пожалуйста.

1 Ответ

1 голос
/ 15 января 2020

Ваше требование звучит для меня немного неопределенно. Кстати, когда вы используете аннотацию @RequestBody, она просто связывает тело вашего запроса Http с объектом вашей модели. Проще говоря, когда вы избегаете этой аннотации, вы пропустите любой основной текст запроса http, отправленный запросом, следовательно, вы не увидите этого в чванстве. Вот и все. Если вам нужно больше разъяснений или что-нибудь, пожалуйста, укажите это.

...