400使用modelAttribute在Spring MVC中上传多个文件以进行表单提交时出现错误请求

时间:2017-04-29 09:33:41

标签: java spring forms jsp spring-mvc

我是Spring MVC的新手用户。我尝试设计一个上传多个文件的表单,并将表单提交的操作重定向到控制器URL,并且明智地将表单的命令名定义为需要绑定的模型属性。所以我假设表单参数将被映射为定义的路径'在带有模型属性参数的标签中。

我在下面发布我的代码:

SampleForm.jsp

assert

MyController.java

delete

Model.java

  <form:form id="exampleFullForm" commandName="attribute1" enctype="multipart/form-data" method="post" autocomplete="off" novalidate="novalidate" class="fv-form fv-form-bootstrap" action="url1">

      <form:input type="text" class="form-control" name="accnumber" path="account_number"/>
    <form:input type="file" name="proof1" required="" file-model="proof1" path="files[0].file" id="files[0].file" class="filestyle"  />
<form:input type="file" required="" name="proof2" file-model="proof2" path="files[1].file" id="files[1].file" class="filestyle" style="position:inherit;"/>
     </form:form>

表单提交后,我收到错误400错误请求。我也附上了帖子参数的快照。据我所知,文件已正确附加。

@RequestMapping(value = "url1", method = RequestMethod.POST,consumes="multipart/form-data")
    public ModelAndView createNewMerchantAccount(@ModelAttribute("attribute1") ModelName modelParam, Map<String, Object> models) throws IOException{
        //Do Something
        return new ModelAndView("successpage");

    }

FileBucket模型:

 public Model() {
               files.add(new FileBucket());
                files.add(new FileBucket());
        }

    @Id
        @Column(name = "id")
        @GeneratedValue
        private Long id;
    @Column(name= "account_number")
        private Integer account_number;
    @Transient
        private List<FileBucket> files = new ArrayList<FileBucket>();

        //Getters and setters
        public List<FileBucket> getFiles() {
            return files;
        }
        public void setFiles(List<FileBucket> files) {
            this.files = files;
        }

我的标题: Headers_attached_image

帮我解决问题。

2 个答案:

答案 0 :(得分:1)

经过几个小时的挣扎,我想出了一条拯救的方法。

在我的控制器中,我忘记添加绑定结果,这就是我调试错误的方法:

@RequestMapping(value = "url1", method = RequestMethod.POST,consumes="multipart/form-data")
    public ModelAndView createNewMerchantAccount(@ModelAttribute("attribute1") ModelName modelParam,BindingResult result, Map<String, Object> models) throws IOException{

        //Do Something
 if(result.hasErrors()) {
               System.out.println("Result Error Occured"+result.getAllErrors());
            }
        return new ModelAndView("successpage");

    }

错误似乎是在模型属性之一的异常中。

在将参数转换为定义类型后,它就像魅力一样。

答案 1 :(得分:0)

请参阅以下代码示例,它可以为您提供帮助。

在您的模型中,添加以下即时变量: -

{
  "management" : "http://localhost:7474/db/manage/",
  "data" : "http://localhost:7474/db/data/",
  "bolt" : "bolt://localhost:7687"
}

在你的jsp中,添加以下代码示例: -

class Product{
//other variables
      @Transient
        private MultipartFile[] productImage;
//getter setter
}

在控制器中使用以下代码片段中的示例: -

<label class="control-label" for="productImage">Upload Picture</label>
            <form:errors path="productImage" cssStyle="color:#ff0000;" />
            <table id="fileTable" style="border-spacing: 5;">
            <tr>
            <td><form:input path="productImage" type="file" class="filestyle" data-buttonName="btn-primary" data-buttonBefore="true" /></td>
            </tr>
            <tr>
            <td><form:input path="productImage" type="file" class="filestyle" data-buttonName="btn-primary" data-buttonBefore="true" /></td>
            </tr>
</table>

我希望这有助于解决问题。