多部分表单数据输入 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的主要内容,如果未能解决你的问题,请参考以下文章

Apache http客户端在输入请求的多部分上抛出错误

模型未在表单提交时更新,使用 Backbone + Stickit

无法将多部分表单数据从 React 正确发送到 Express Js

Nodejs POST 请求多部分/表单数据

PHP多部分表单数据PUT请求?

解析多部分/表单数据,从请求后接收