Java 使用Springfox和Swagger ui上传多部分文件

Java 使用Springfox和Swagger ui上传多部分文件,java,spring,spring-mvc,file-upload,swagger-ui,Java,Spring,Spring Mvc,File Upload,Swagger Ui,我使用SpringMVC作为rest控制器,并使用Springfox将Swagger ui与控制器集成。我想有一个方法,能够上传一个文件通过大摇大摆的用户界面。我只需要两个参数,一个用于对象id的长效参数和要上载的文件 @RestController 公共类控制器{ @RequestMapping(value=“/upload”,method=RequestMethod.POST) public void上载文件(@RequestParam Long id, @RequestParam(多部分文

我使用SpringMVC作为rest控制器,并使用Springfox将Swagger ui与控制器集成。我想有一个方法,能够上传一个文件通过大摇大摆的用户界面。我只需要两个参数,一个用于对象id的长效参数和要上载的文件

@RestController
公共类控制器{
@RequestMapping(value=“/upload”,method=RequestMethod.POST)
public void上载文件(@RequestParam Long id,
@RequestParam(多部分文件){
//做点什么
}
}
我已经尝试了几乎所有的方法,但我无法让文件上传按钮出现。但是,如果我这样做:

@RestController
公共类控制器{
@RequestMapping(value=“/upload”,method=RequestMethod.POST)
public void上载文件(@RequestParam Long id,
@请求部分文件){
//做点什么
}
}
文件上载按钮出现,但在尝试上载文件时,它总是抛出http代码415。此外,我需要输入一个多部分文件,而不是一个常规文件。即使我对多部分文件使用@RequestPart注释,也不会出现“选择要上载的文件”按钮。我怎样才能让它工作????甚至:

@RestController
公共类控制器{
@RequestMapping(value=“/upload”,method=RequestMethod.POST)
public void上载文件(@RequestPart字符串元数据,
@RequestPart(多部分文件){
//做点什么
}
}
不行。如果有人可以演练如何使此按钮在MultipartFile中显示?我将永远感激。

使用

@RequestPart(required=true)多部分文件

并且使用2.1.0或最新版本,以前的版本有一个bug


在我的情况下,我需要做两件事

  • 我的MultipartFile请求参数必须命名为'file',否则,swagger ui将不会显示文件上载输入控件
  • 我必须注册以下bean
  • 有两件事

  • 消耗值应为
    “多部分/表单数据”
    <代码>使用=“多部分/表单数据”
  • @RequestPart(“文件”)@ApiParam(value=“file”,required=true)多部件文件


  • 我认为您在第二个代码片段中缺少@RequestMapping的consumes属性。请参见下面的示例

    @RequestMapping(
        path = "/upload", 
        method = RequestMethod.POST, 
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<String> handleUpload(
            @RequestPart("file") MultipartFile file, 
            @RequestParam("someId") Long someId,         
            @RequestParam("someOtherId") Long someOtherId) { 
        return new ResponseEntity<>();
    }
    
    @RequestMapping(
    path=“/upload”,
    method=RequestMethod.POST,
    consumes=MediaType.MULTIPART\u FORM\u DATA\u VALUE)
    公共责任手册(
    @请求部分(“文件”)多部分文件,
    @RequestParam(“someId”)长someId,
    @RequestParam(“someOtherId”)长someOtherId){
    返回新的ResponseEntity();
    }
    
    尝试对MultipartFile使用@RequestPart而不是@RequestParam

    @RestController
    public class controller {
    
        @RequestMapping(value="/upload", method=RequestMethod.POST)
        public void uploadFile(@RequestParam Long id,
                           @RequestPart MultipartFile file) {
            //do some stuff
        }
    
    }
    

    感谢您提供的代码片段。
    我使用了来自的解决方案,但这意味着要使用Spring的XML配置,这是我试图避免的:)应该指出的是,在使用Maven/Gradle/etc时,必须为库添加依赖项(至少我必须这样做),否则,Spring IoC系统无法检索到要将文件上载到的bean。在我的情况下,我必须像原始答案一样将@RequestParam更改为@RequestPart。也许您应该编辑答案。t如果您设置了正确的答案,那就太好了。此答案不会添加任何以前的答案尚未提供的内容
    @RequestMapping(
        path = "/upload", 
        method = RequestMethod.POST, 
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<String> handleUpload(
            @RequestPart("file") MultipartFile file, 
            @RequestParam("someId") Long someId,         
            @RequestParam("someOtherId") Long someOtherId) { 
        return new ResponseEntity<>();
    }
    
    @RestController
    public class controller {
    
        @RequestMapping(value="/upload", method=RequestMethod.POST)
        public void uploadFile(@RequestParam Long id,
                           @RequestPart MultipartFile file) {
            //do some stuff
        }
    
    }