我正在尝试使用Spring Boot @RestController上传文件:

    @RequestMapping(value = "/register", method = RequestMethod.POST)
public AppResponse registerUserFromApp(
        @RequestBody UserInfo userInfo,
        @RequestParam(value = "file", required = false) CommonsMultipartFile file,
        @RequestParam(value = "inviteCode", required = false) String inviteCode){


有了这个定义,我尝试了这个邮递员的请求:
spring-boot - 在Spring Boot REST API中上传文件-LMLPHP
这行不通。

我尝试将其添加到我的RequestMapping中:

@RequestMapping(value = "/register", method = RequestMethod.POST, consumes = "multipart/form-data")


这给了我同样的错误。

对于userInfo,我将按照another SO answer的建议在表单数据字段本身中将值作为JSON发送。不起作用,同样的错误。

正如其他一些答案中所建议的那样,我还确保我没有在Postman中发送任何标头。

我也尝试在application.properties中添加以下属性:

spring.http.multipart.enabled=false


同样的错误。我也尝试使用MultipartFile代替CommonsMultipartFile,完全没有区别。

我究竟做错了什么?我也想在请求中将图像作为File和UserInfo对象发送。邮递员的例子将不胜感激。

最佳答案

具有自定义对象的多部分表单数据将被接受为字符串。因此您的控制器将如下所示。

@RequestMapping(value = "/register", method = RequestMethod.POST)
public AppResponse registerUserFromApp(
    @RequestBody String userInfo,
    @RequestParam(value = "file", required = false) CommonsMultipartFile file,
    @RequestParam(value = "inviteCode", required = false) String inviteCode){

    ObjectMapper obj=new ObjectMapper();
    UserInfo userInfo=obj.readValue(clientData, UserInfo.class);

}


您将必须使用ObjectMapper将String转换为pojo。希望这会有所帮助。

09-05 07:25