springMVC 接收content-type=formdata的request请求

本文介绍了解决SSM框架下使用POST请求发送FormData数据时,后台接收数据为null的问题。通过配置CommonsMultipartResolver并添加依赖,实现了数据的正确接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SSM 的框架中接口开发时,使用postman发送post 请求,contentType为formData

但是后台数据接收不到,全部为null,需要为mvc 提供一个Resolver来实现mvc 方法入参

        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"></property>
        <property name="maxUploadSize" value="10485760000"></property>
        <property name="maxInMemorySize" value="40960"></property>
    </bean>
在spring 的配置文件中加入以上代码

但是CommonsMultipartResolver 类 需要依赖common-io和common-fileupload的jar包在pom文件中加入依赖

                <!-- formdata 数据接收,以及文件上传 -->   
         <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
重启项目,SpringMVC通过@RequestParam参数可以实现formdata 数据绑定了。

<think>我们有两个问题需要解决:1.el-cascader第一级不可选但可见的设置方法2.Contenttype'multipart/form-data'notsupported的解决方案首先,针对第一个问题:el-cascader第一级不可选但可见。在ElementUI的级联选择器(el-cascader)中,有时我们希望展示第一级(父级)选项,但禁止用户选择,只能选择子级。这可以通过设置`props`中的`checkStrictly`属性为`true`(即开启严格选择模式,允许选择任意级别)然后配合`disabled`属性来实现。但这样会导致每一级都可以选择,而我们希望第一级不可选。另一种方法是使用`disabled`属性在数据源中标记禁用。我们可以为第一级节点的某个字段(如`disabled`)设置为`true`,这样它们就会显示为禁用状态(不可选),但依然可见。具体步骤:1.在数据源中,为每个第一级节点添加一个`disabled:true`的属性。2.在el-cascader组件中,通过`props`配置指定`disabled`属性对应的字段名。示例数据结构:```javascriptoptions:[{value:'zhinan',label:'指南',disabled:true,//第一级禁用children:[{value:'shejiyuanze',label:'设计原则'},{value:'daohang',label:'导航'}]},{//...其他选项}]```在模板中:```html<el-cascader:options="options":props="{disabled:'disabled'}"></el-cascader>```这样,第一级节点就会显示为禁用状态(灰色),用户无法选择,但可以展开看到子节点。注意:如果你希望第一级节点只是不可选,但不禁用样式(或者自定义样式),那么可能需要自定义节点内容(使用插槽)并阻止第一级节点的点击事件。但是,使用`disabled`属性是最简单直接的方式。其次,第二个问题:Contenttype'multipart/form-data'notsupported的解决方案。根据引用内容,这个错误通常发生在SpringBoot后端接收文件上传时。常见原因和解决方案如下:1.**错误使用@RequestBody注解**:`@RequestBody`用于接收请求体中的JSON数据,而文件上传(multipart/form-data)应该使用`@RequestParam`注解或`MultipartFile`类型直接接收。错误示例:```javapublicStringupload(@RequestBodyMultipartFilefile)//错误```正确示例:```javapublicStringupload(@RequestParam("file")MultipartFilefile)//正确```或者,如果前端上传的是多个文件或字段,也可以使用`@RequestPart`,但通常`@RequestParam`就足够了。2.**缺少multipart支持**:确保在SpringBoot项目中已经配置了multipart解析器。通常,我们可以在配置文件中设置文件上传的参数,但SpringBoot默认会提供。如果使用SpringMVC,可能需要手动配置`MultipartResolver`。3.**缺少jackson依赖**:引用[4]提到,当使用`@RequestBody`接收JSON时,需要jackson依赖。但文件上传不需要jackson来处理,所以这个问题与文件上传错误无关。不过,如果同时接收其他JSON数据,则可能需要。4.**检查请求Content-Type**:确保前端请求Content-Type确实是`multipart/form-data`,并且没有其他字符(如boundary)被错误修改。5.**SpringBoot版本与配置**:在SpringBoot2.x中,默认使用Servlet3.0的multipart处理,所以通常不需要额外配置。但如果需要自定义,可以在`application.properties`中添加:```propertiesspring.servlet.multipart.enabled=truespring.servlet.multipart.max-file-size=10MBspring.servlet.multipart.max-request-size=10MB```6.**检查Controller方法注解**:确保Controller类上有`@RestController`或`@Controller`注解,并且方法上使用了`@PostMapping`等映射注解。7.**检查前端表单**:如果是表单提交,确保有`enctype="multipart/form-data"`,例如:```html<formaction="/upload"method="post"enctype="multipart/form-data"><inputtype="file"name="file"><inputtype="submit"></form>```总结解决方案:-后端使用`@RequestParam`或`@RequestPart`注解接收文件参数,不要用`@RequestBody`。-确保前端请求Content-Type正确,并且表单设置了`enctype="multipart/form-data"`。-检查是否有必要的配置(如multipart支持,但SpringBoot默认开启)。如果问题仍然存在,检查是否有过滤器或拦截器修改了请求类型,或者尝试更新SpringBoot版本。最后,生成相关问题:§§相关问题§§1.el-cascader如何实现只选择最后一级节点?2.如何自定义el-cascader节点的样式和内容?3.除了文件上传,SpringBoot如何处理其他类型的请求数据(如JSON)?4.在SpringBoot中,如何配置多个文件上传?5.如何解决SpringBoot中的其他常见HTTP415错误?</think>### el-cascader 第一级不可选但可见的设置方法 在 Element UI 的级联选择器中,要实现第一级节点可见但不可选,可通过以下两种方式实现: #### 方法一:使用 `disabled` 属性(推荐) 在数据源中为第一级节点添加 `disabled: true` 属性,并通过 `props` 指定禁用字段: ```html <el-cascader :options="options" :props="{ disabled: 'isDisabled', // 指定禁用字段名 label: 'label', value: 'value', children: 'children' }" /> ``` 数据源结构示例: ```javascript options: [ { value: 'level1', label: '一级节点(不可选)', isDisabled: true, // 禁用标志 children: [ { value: 'child1', label: '可选子节点1' }, { value: 'child2', label: '可选子节点2' } ] } ] ``` #### 方法二:自定义节点样式 通过作用域插槽自定义样式,添加 CSS 禁用指针事件: ```html <el-cascader :options="options"> <template #default="{ node, data }"> <span :class="{ 'disabled-node': data.level === 0 }"> {{ data.label }} </span> </template> </el-cascader> <style> .disabled-node { cursor: not-allowed; /* 禁用鼠标交互 */ opacity: 0.7; /* 视觉弱化 */ pointer-events: none;/* 阻止点击事件 */ } </style> ``` > 两种方法效果对比: > - 方法一会完全禁用节点(灰色显示) > - 方法二仅视觉禁用但保留节点展开功能 --- ### Content type 'multipart/form-data' not supported 解决方案 此错误通常由 Spring Boot 后端接收文件上传时注解使用不当引起,解决方案如下: #### 1. 修复控制器注解(核心方案) **错误用法** ❌: ```java @PostMapping("/upload") public String upload(@RequestBody MultipartFile file) { ... } ``` `@RequestBody` 用于 JSON 数据,不适用于文件上传。 **正确用法** ✅: ```java @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) { // 处理文件逻辑 } ``` #### 2. 检查前端请求格式 确保前端 FormData 设置正确: ```html <!-- HTML 表单 --> <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> </form> <!-- Axios 示例 --> const formData = new FormData(); formData.append('file', file); // 字段名需与@RequestParam("file")匹配 ``` #### 3. 添加必要依赖 检查 `pom.xml` 是否包含 Spring 文件上传支持: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 无需额外添加 multipart 依赖 --> ``` #### 4. 验证配置属性 在 `application.properties` 中调整文件大小限制(可选): ```properties spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` #### 错误触发场景对比 | 错误场景 | 解决方案 | |------------------------|-----------------------------| | 使用 `@RequestBody` | 替换为 `@RequestParam` | | 前端未设 `enctype` | 添加 `enctype="multipart/form-data"` | | 字段名不匹配 | 确保前端字段名与注解一致 | --- ### 相关问题 1. 如何在 Element UI 中实现级联选择器的动态加载? 2. Spring Boot 文件上传时如何同时接收 JSON 参数? 3. `@RequestParam` 和 `@RequestBody` 在 Spring 中有哪些核心区别? 4. Element UI 级联选择器如何实现多选且仅选叶子节点? 5. 如何全局处理 Spring Boot 的 `HttpMediaTypeNotSupportedException` 异常? [^1]: 上传图片时报错:Content type ‘multipart/form-data;boundary=----WebKitFormBoundarypOpfYxCGU6Q4sciA;charset=UTF-8’ not supported [^2]: 解决办法:@RequestParam("file") 去掉就不报错了 [^3]: 后端使用@RequestBody接收会报出 org.springframework.web.HttpMediaTypeNotSupportedException [^4]: 前端传数据出错pleted 415 UNSUPPORTED_MEDIA_TYPE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值