java - 春季无法将pdf文件转换为字节[]
问题描述
我在将pdf
文件转换为 abyte array
以将其保存在数据库中时遇到问题。我收到以下错误:
“无法将 org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile 类型的属性值转换为属性文件所需的类型 byte[];嵌套异常是 java.lang.IllegalArgumentException:无法转换 org.springframework.web 类型的值.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile 到属性文件 [0] 所需的类型字节:PropertyEditor [org.springframework.beans.propertyeditors.CustomNumberEditor] 返回 org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile 类型的不适当值
我的代码:
-控制器
@PostMapping("/recruitment")
public String addingNewCandidateToDataBase(@RequestParam MultipartFile file, @Valid @ModelAttribute("candidate") CandidateDTO candidateDTO, BindingResult result) throws IOException {
if(result.hasErrors()){
return "recruitment";
}
if(candidateDTO.getAgreement() == null){
result.rejectValue("agreement", null, "Aby aplikować musisz wyrazić zgodę.");
return "recruitment";
}
if(!file.getOriginalFilename().endsWith("pdf")){
result.rejectValue("file", null, "Plik musi posiadać rozszerzenie .pdf!");
return "recruitment";
}
candidateDTO.setContentType(file.getContentType());
candidateDTO.setFile(file.getBytes());
candidateDTO.setFileName(file.getName());
candidateService.creatingNewCandidate(candidateDTO);
return "redirect/recruitment?complete";
}
jsp文件
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Recruitment</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<form:form enctype="multipart/form-data" modelAttribute="candidate" method="post">
<center>
<c:if test="${param.complete != null}">
<h1><p style="color: greenyellow">Twoje zgłoszenie zostało wysłane! Dziękujemy.</p></h1>
</c:if>
<h1>Dane kandydata</h1></center>
<p><form:label path="firstName">Imię*</form:label></p>
<p><form:input path="firstName"/><form:errors path="firstName"/><form:errors path="lastName"/></p>
<br>
<p><form:label path="lastName">Nazwisko*</form:label></p>
<p><form:input path="lastName"/></p>
<br>
<p><form:label path="email">E-mail*</form:label><form:errors path="email"/></p>
<p><form:input path="email"/></p>
<br>
<p><form:label path="phoneNumber">Telefon komórkowy</form:label><form:errors path="phoneNumber"/></p>
<p><form:input path="phoneNumber"/></p>
<br>
<p><form:label path="experience">Czy posiadasz doświadczenie? Jeśli jak to ile i jakie.*</form:label><form:errors
path="experience"/></p>
<p><form:textarea path="experience"/></p>
<br>
<p><form:label path="position">Na jakie stanowisko chcesz aplikować?*</form:label><form:errors path="position"/></p>
<p><form:input path="position"/></p>
<br>
<p><form:label path="file">CV*</form:label><form:errors path="file"/></p>
<p><form:input type="file" path="file"/> </p>
<br>
<center><h1>Dodatkowe pytania</h1></center>
<br>
<p><form:label path="whenIsReadyToStart">Od kiedy jesteś gotowy by zacząć pracę?</form:label><form:errors
path="whenIsReadyToStart"/></p>
<p><form:input path="whenIsReadyToStart"/></p>
<br>
<p><form:label path="grossExpectation">Jakie są Twoje oczekiwania finansowe (brutto)?</form:label><form:errors
path="grossExpectation"/></p>
<p><form:input path="grossExpectation"/></p>
<br>
<center><h2>Zgoda</h2></center>
<div class="form-group form-check">
<form:checkbox path="agreement" value="${candidate.agreement}"/> ${candidate.agreement}
</div>
<br>
<button type="submit" class="btn btn-primary">WYŚLIJ</button>
</form:form>
<br>
</div>
</body>
</html>
解决方案
您可能缺少创建MultipartResolver
.
MultipartResolver
fromorg.springframework.web.multipart
package 是一种解析多部分请求的策略,包括文件上传要启用多部分处理,您需要
MultipartResolver
在DispatcherServlet
Spring 配置中声明一个名称为multipartResolver
.
尝试在 Spring MVC beans 配置中添加以下内容
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
推荐阅读
- java - 在java中省略父类属性
- google-sheets - 抓取并列出多个工作表/选项卡的 URL
- javascript - SailsJS - 无法加载静态文件
- swift - Cocoapod “pod spec lint” CompileSwift 返回了一个不成功的退出代码
- julia - 在 Julia 中运行最小均方函数
- java - 如何在某个光标位置移动窗口中的图形对象?
- javascript - Enter 按键在 Safari 浏览器中不起作用
- java - JPARepository 搜索查询返回 null
- matlab - Matlab /等待栏/进度条/GUI
- r - 在 R 中,如何使用具有定义数量的集群和每个集群内的观察值的集群抽样来重新采样以准备引导?