无法将字符串转换为 MultipartFile
Cannot convert String to MultipartFile
请帮我解决我的问题!
我有 bootstrap 个文件输入,文件包括:
<link href="/assets/css/fileinput/fileinput.css" rel="stylesheet" type="text/css">
<link href="/assets/css/fileinput/fileinput-rtl.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="/assets/js/fileinput/fileinput.js"></script>
<script type="text/javascript" src="/assets/js/plugins/fileinput/piexif.js"></script>
<script type="text/javascript" src="/assets/js/plugins/fileinput/sortable.js"></script>
<script type="text/javascript" src="/assets/js/plugins/fileinput/purify.js"></script>
我还有一个用于 fileInput 的宏:
<#macro fileInputBind path required=false fileMask="">
<@spring.bind path/>
<div class="form-group">
<@label path required/>
<#assign replacedPath = path?replace(".", "-") />
<#assign fileInputId = "${replacedPath}" />
<div class="col-md-12">
<input id="${fileInputId}" name="${spring.status.expression}" type="file" class="form-control file-styled"
accept="${fileMask}">
</div>
</div>
</#macro>
这是我的 ftl 元素:
<@form.fileInputBind "incidentRovdCreateForm.attachment"/>
我的表单中的变量来处理这个字段:
private MultipartFile attachment;
但是当@PostMapping 执行的时候我在这部分得到了一个错误:
if (bindingResult.hasErrors())
return new ModelAndView("incident-rovd/create")
.addObject("typeIncident1", incidentTypeLevel1Repository.findAll())
.addObject("typeIncident2", form.getIncidentTypeLevel1() == null ? Collections.emptyList() : incidentTypeLevel2Repository.findAllByParent(form.getIncidentTypeLevel1()))
.addObject("typeIncident3", form.getIncidentTypeLevel2() == null ? Collections.emptyList() : incidentTypeLevel3Repository.findAllByParent(form.getIncidentTypeLevel2()))
.addObject("incidentRovdCreateForm", form);
错误:
无法将类型 'java.lang.String' 的 属性 值转换为 属性 'attachment' 所需的类型 'org.springframework.web.multipart.MultipartFile';嵌套异常是 java.lang.IllegalStateException:无法将类型 'java.lang.String' 的值转换为 属性 所需的类型 'org.springframework.web.multipart.MultipartFile' 'attachment':找不到匹配的编辑器或转换策略。
我有什么问题?
我用HTML + JavaScript作为前端遇到了同样的问题。如果bean的文件属性不是必需的,以下可能对你有帮助:
// js
var formData = new FormData(document.getElementById("yourFormId"));
//TestBean.java
@Transient
private MultipartFile file;
此方法避免了“无法将字符串转换为 MultipartFile”错误。
请帮我解决我的问题! 我有 bootstrap 个文件输入,文件包括:
<link href="/assets/css/fileinput/fileinput.css" rel="stylesheet" type="text/css">
<link href="/assets/css/fileinput/fileinput-rtl.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="/assets/js/fileinput/fileinput.js"></script>
<script type="text/javascript" src="/assets/js/plugins/fileinput/piexif.js"></script>
<script type="text/javascript" src="/assets/js/plugins/fileinput/sortable.js"></script>
<script type="text/javascript" src="/assets/js/plugins/fileinput/purify.js"></script>
我还有一个用于 fileInput 的宏:
<#macro fileInputBind path required=false fileMask="">
<@spring.bind path/>
<div class="form-group">
<@label path required/>
<#assign replacedPath = path?replace(".", "-") />
<#assign fileInputId = "${replacedPath}" />
<div class="col-md-12">
<input id="${fileInputId}" name="${spring.status.expression}" type="file" class="form-control file-styled"
accept="${fileMask}">
</div>
</div>
</#macro>
这是我的 ftl 元素:
<@form.fileInputBind "incidentRovdCreateForm.attachment"/>
我的表单中的变量来处理这个字段:
private MultipartFile attachment;
但是当@PostMapping 执行的时候我在这部分得到了一个错误:
if (bindingResult.hasErrors())
return new ModelAndView("incident-rovd/create")
.addObject("typeIncident1", incidentTypeLevel1Repository.findAll())
.addObject("typeIncident2", form.getIncidentTypeLevel1() == null ? Collections.emptyList() : incidentTypeLevel2Repository.findAllByParent(form.getIncidentTypeLevel1()))
.addObject("typeIncident3", form.getIncidentTypeLevel2() == null ? Collections.emptyList() : incidentTypeLevel3Repository.findAllByParent(form.getIncidentTypeLevel2()))
.addObject("incidentRovdCreateForm", form);
错误: 无法将类型 'java.lang.String' 的 属性 值转换为 属性 'attachment' 所需的类型 'org.springframework.web.multipart.MultipartFile';嵌套异常是 java.lang.IllegalStateException:无法将类型 'java.lang.String' 的值转换为 属性 所需的类型 'org.springframework.web.multipart.MultipartFile' 'attachment':找不到匹配的编辑器或转换策略。
我有什么问题?
我用HTML + JavaScript作为前端遇到了同样的问题。如果bean的文件属性不是必需的,以下可能对你有帮助:
// js
var formData = new FormData(document.getElementById("yourFormId"));
//TestBean.java
@Transient
private MultipartFile file;
此方法避免了“无法将字符串转换为 MultipartFile”错误。