多部分表单数据输入 Java 模型属性未在请求类中注入元素 - Spring Boot
Posted
技术标签:
【中文标题】多部分表单数据输入 Java 模型属性未在请求类中注入元素 - Spring Boot【英文标题】:Multipart Form Data Input Java Model Attribute is not injecting the element's in Request Class - Spring Boot 【发布时间】:2022-01-23 10:27:33 【问题描述】:我正在尝试上传文件以及一些表单输入,我创建了一个 Spring Boot POST 控制器。将 @ModelAttribue 作为输入类,在应用程序日志记录中,可以看到在应用程序级别获取字节流。这里的问题是@ModelAttribute 没有设置Java Pojo 类中的那些。它变得空了。下面是我的控制器方法和请求负载类和日志。
我在这里做错了什么。
@PostMapping(value = "/registration/file", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseStatus(code = HttpStatus.OK)
public BaseResponse fileTest(@ModelAttribute("data") FileUpload fileUpload)
log.info("..........getEmail:", fileUpload.getEmail());
log.info("..........getCrDoc:", fileUpload.getCrDoc());
return new BaseResponse();
@Data
public class FileUpload
private String email;
private MultipartFile crDoc;
-- 日志
HttpLoggingFilter:96 | Request - [PATH INFO:/pvt/registration/file] [REQUEST PARAMETERS:] [REQUEST BODY:------WebKitFormBoundaryDn9gdoWJ3qb48OObContent-Disposition: form-data; name="email"hello@abc.com------WebKitFormBoundaryDn9gdoWJ3qb48OObContent-Disposition: form-data; name="crDoc"; filename="sample.png"Content-Type: image/png�PNGIHDR
PrivateUserRegistrationController:61 | ..........getEmail:null
PrivateUserRegistrationController:62 | ..........getCrDoc:null
【问题讨论】:
我认为你应该将@ModelAttribute("data") 更新为@ModelAttribute 然后再试一次。 【参考方案1】:我找到了解决方案,通过添加下面的 bean。它现在正在工作。
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() throws IOException
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(appConstants.multipartUploadFileMaxSize);
multipartResolver.setMaxInMemorySize(appConstants.multipartUploadFileMaxSize);
multipartResolver.setMaxUploadSizePerFile(appConstants.multipartUploadFileMaxSize);
multipartResolver.setUploadTempDir(
new DefaultResourceLoader().getResource(String.format("file:%s", appConstants.fileTempPathUploads)));
multipartResolver.setDefaultEncoding("utf-8");
return multipartResolver;
【讨论】:
以上是关于多部分表单数据输入 Java 模型属性未在请求类中注入元素 - Spring Boot的主要内容,如果未能解决你的问题,请参考以下文章
模型未在表单提交时更新,使用 Backbone + Stickit