Spring图像,Form值和FormData中的对象列表

时间:2018-11-30 15:27:22

标签: javascript java spring multipartform-data form-data

我有RestController端点:

Mono<A> editA(@PathVariable String id, @Valid A a)

A类看起来像这样:

class A {
  private MultipartFile imageToSave;
  private String name;
  private String otherString;
  private ArrayList<B> bList;
}

B类看起来类似于A类(但仅包含String fiels)。

前端客户端(使用Axios进行响应)发送表单值(两个字符串,图像文件)。我使用javascript FormData对象将此值发送到一个请求中,并且工作正常。

但是我也想发送一个列表B对象。因此,我尝试仅将列表B对象添加到FormData并将其发送。

我如何使用FormData发送带有对象的列表并将它们映射到ArrayList?

  

已解决的[org.springframework.validation.BindException:   org.springframework.validation.BeanPropertyBindingResult:1个错误   字段“ bList”上的对象“ a”中的字段错误:拒绝的值   [[object Object]];码   [typeMismatch.a.bList,typeMismatch.bList,typeMismatch.java.util.ArrayList,typeMismatch];   论点   [org.springframework.context.support.DefaultMessageSourceResolvable:   代码[a.bList,bList];参数[];预设讯息   [bList]];默认消息[无法转换类型的属性值   将'java.lang.String'更改为属性的必需类型'java.util.ArrayList'   'bList';嵌套的异常是java.lang.IllegalStateException:   无法将类型“ java.lang.String”的值转换为必需的类型   属性“ bList”的“ java.util.ArrayList”:没有匹配的编辑器或   找到转换策略]]

1 个答案:

答案 0 :(得分:0)

在Laravel中使用formData传递错误时,我遇到了类似的错误。原来,您不能将formData API与数组一起使用。 看看以下网址: https://developer.mozilla.org/en-US/docs/Web/API/FormData/append 它仅接受字符串或blob。 对于您的解决方案,您将必须像我所做的那样。

IllegalArgumentException

在这里,我要做的基本上是从表单输入属性中构建对象,然后使用通过axios传递的以下代码。

  let formData = {};
            for (var property in this.form) {
                if (this.form.hasOwnProperty(property)) {
                      //  formData.append(property,this.form[property]);
                        formData[property] = this.form[property];

                }
            }