【问题标题】:Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `java.util.ArrayList已解决 [org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法反序列化 `java.util.ArrayList 的实例
【发布时间】:2020-10-18 21:46:04
【问题描述】:

我使用弹簧靴在购物网站上工作并做出反应。当我尝试创建一个新产品时,我会填写一些输入和图像。但是在提交时我得到 400 错误代码。错误:已解决 [org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList<org.springframework.web.multipart.MultipartFile> 的实例;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException: 无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList<org.springframework.web.multipart.MultipartFile> 的实例 在 [来源:(PushbackInputStream);行:1,列:1095](通过引用链:com.shopping_app.model.request.CreateProductRequest["images"])]

  • 在反应中

    upload = () => {
    
     const formData = new FormData()
    
     for (const image of this.state.images) {
       formData.append('image', image)
     }
    
     formData.append('product', {
       categories: this.state.categories,
       brand: this.state.brand,
       colors: this.state.colors,
       sizes: this.state.sizes,
       name: 'product 1',
       price: 100,
       description: 'description',
     })
    
     Axios.post('http://localhost:7070/test', {
       productRequest: {
         categories: this.state.categories,
         brand: this.state.brand,
         colors: this.state.colors,
         sizes: this.state.sizes,
         name: 'product 2',
         price: 100,
         description: 'description',
       },
       images: formData,
     }).then((res) => console.log(res.data))
    

    }

  • 在 Spring Boot 中

    @PostMapping(value = "/test")
     public void test(@RequestBody CreateProductRequest createProductRequest)
     {
         productService.createProduct(createProductRequest);
     }
    
    
    CrateProductRequest
    
    public class CreateProductRequest
    {
      private ProductRequest productRequest;
    
      private List<MultipartFile> images;
    
      ... constructors, getters and setters
    }
    

    感谢您的帮助

【问题讨论】:

    标签: reactjs spring-boot file-upload


    【解决方案1】:

    用于上传(POST-ing)多部分文件的 spring 控制器应如下所示:

    @PostMapping("/test")
    public void test(@RequestParam("file") MultipartFile file){
    ....
    ....
    }
    

    如果您需要使用请求正文上传多个文件,那么

    @PostMapping("/test")
    public void test(@RequestPart("images") MultipartFile[] images, @RequestPart("productRequest") CreateProductRequest productRequest){
    ....
    ....
    }
    

    请查看blog

    【讨论】:

    • 是的,我知道它,如果我只是发送 formData 在反应中它的工作。但我想发送一个包含图像和其他产品信息的对象
    • 哦,在这种情况下,您需要第二个选项。我更新了我的答案。 @sefterm-zade
    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2020-04-13
    • 2020-12-10
    • 2019-09-22
    • 2021-06-15
    • 2021-05-11
    • 2020-04-03
    相关资源
    最近更新 更多