• swagger-ui提交请求无name(指input中的name属性)值


    swagger-ui提交请求,请求不包含name值,造成后台无法进行接受参数。

    @Operation(description = "上传文件",tags = "上传")
        @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
        public BaseResponseDataVo<UploadFileModel> uploadFile(@Parameter(style = ParameterStyle.FORM,explode = Explode.TRUE) MultipartFile multipartFile){
    
            String yearMonthDay = DateFormatUtils.format(new Date(), "yyyyMMdd");
    
            return null;
        }

    // 就算把@Parameter换成 @Parameter(name = "multipartFile",schema = @Schema(type = "string",format = "binary"))  也不行,使用@ApiParam也不会提交携带name属性名
    //swagger的@RequestBody和spring的RequestBod依旧解决不了问题

    // swagger的@RequestBody(content = @Content(mediaType = "application/octet-stream",schema = @Schema(type = "string",format = "binary",name = "file"))) 也解决不了问题
    // 把@Parameter注解换成swagger1.5.X的@ApiParam(name = "multipartFile",value = "文件对象")注解,也依旧无果

    说明:我指的name值就是form表单input元素的name值,没有这个值你后台接收不到的
    
    

    经过多次尝试无果后,再@Parameter注解位置再添加一个 @RequestPart("file") 注解即可解决swagger提交请求无name值的问题

    @RequestParam注解DOC文档翻译:

    指示方法参数应绑定到Web请求参数的注释。
    在Spring MVC和Spring WebFlux中支持注释的处理程序方法,如下所示:

     * 在Spring MVC中,“request parameters”映射到查询参数,表单数据和多部分请求中的零件。 这是因为Servlet API将查询参数和表单数据组合到称为“parameters”的单个映射中,并且包括对请求正文(request body)的自动解析。

     *  在Spring WebFlux中,“request parameters”仅映射到查询参数。 要处理所有3种查询,表单数据和多部分数据,可以将数据绑定到使用ModelAttribute注释的命令对象。

    如果方法参数类型为Map并指定了请求参数名称,则假定适当的转换策略可用,请求参数值将转换为Map。
    如果方法参数为Map <String,String>或MultiValueMap <String,String>并且未指定参数名称,则将使用所有请求参数名称和值填充map参数。

    @RequestPart注解DOC文档翻译:

    可用于将“ multipart / form-data”请求的一部分与方法参数关联的注释。
    支持的方法参数类型包括MultipartFile和Spring的MultipartResolver抽象,javax.servlet.http.Part和Servlet 3.0多部分请求结合,或者对于其他任何方法参数,该部分的内容都通过HttpMessageConverter传递,并考虑到请求部分的“ Content-Type”标头。这类似于@RequestBody根据非分段常规请求的内容来解析参数的操作。
    请注意,@ RequestParam批注还可用于将“ multipart / form-data”请求的一部分与支持相同方法参数类型的方法参数相关联。

    主要区别在于,当方法参数不是字符串或原始MultipartFile / Part时,@ RequestParam依赖于通过注册的Converter或PropertyEditor进行的类型转换,而RequestPart则依赖于HttpMessageConverters的考虑到请求部分的“ Content-Type”标头。 RequestParam可能与名称-值表单字段一起使用,而RequestPart可能与包含更复杂内容的部分一起使用,例如JSON,XML)。

     

     
    复制请注明出处,在世界中挣扎的灰太狼
  • 相关阅读:
    动态采样
    Java Mail无法解析带分号的收件人列表的问题
    git 使用详解(5) get log 查看提交历史
    git 使用详解(6) 撤消操作
    修改 android的 开机 音乐
    修改 android的 开机 音乐
    关于ubuntu的aptget 包
    ubuntu 10.04 常用 设置
    Android4.0.3 修改 启动 动画
    git 使用详解(5) get log 查看提交历史
  • 原文地址:https://www.cnblogs.com/XingXiaoMeng/p/13813345.html
Copyright © 2020-2023  润新知