Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

简介: 讲述ajax请求后端传参报 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported问题处理

问题背景

这里有一个需求,前端页面需要往后端传参,参数包括主表数据字段以及子表数据字段,由于主表与子表为一对多关系,在添加一条主表记录可能会添加多条子表记录,因此新增数据时需要向后端传参主表字段及子表list数据

新增页面

新增页面效果图

image.png这样的话,传统的前台传参后台接收参数的方式就不能用了,只能自己手动改写传参的方式,传统的传参方式

image.png

后端接收参数方式

image.png

改造

由于本次需要传参list数据,因此需要对原有的新增页面传参方法做改造,考虑了一下,可以通过json的方式传参

image.png

后台接收参数对象改造,增加list子表对象

image.png

后台controller代码,需要对入参对象添加@RequestBody。

1.@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。

2.@RequestBody可以将请求体中的JSON字符串按照键名=属性名绑定到bean上,也可以JSONObject或者Map作为接收类型。

image.png

开始测试,页面填写数据点击提交,可以看到控制台打印的提交参数

[{"name":"phone","value":"3"},{"name":"gwUserName","value":"3"},{"name":"orderNo","value":"2"},{"name":"deductionGoodsIds","value":"2"},{"name":"orderNo","value":"1"},{"name":"deductionGoodsIds","value":"1"},{"name":"gwlist","value":[{"orderNo":"2"},{"orderNo":"1"},{"orderNo":""}]}]

但是此时后台报错了,报错信息

8:22:31.35732764 [http-nio-19350-exec-5] ERRORcom.ruoyi.framework.web.exception.GlobalExceptionHandler- [handleException,95] -Contenttype'application/x-www-form-urlencoded;charset=UTF-8'notsupportedorg.springframework.web.HttpMediaTypeNotSupportedException: Contenttype'application/x-www-form-urlencoded;charset=UTF-8'notsupportedatorg.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:224)
atorg.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:157)
atorg.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130)
atorg.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:126)
atorg.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:166)

由于这里使用了@RequestBody注解来将请求体中的json格式数据映射到对象,但是ajax请求使用的是传统的请求方式

image.png

ajax请求默认的content-type为application/x-www-form-urlcoded,而Spring的@RequestBody不处理content-type=application/x-www-form-urlcoded的请求,因此程序执行就会报错,报错信息

image.png

因此这里在改变前端传参为json格式数据的时候,后端添加@RequestBody,同时前端ajax请求也需要添加content-type,content-type内容就是错误提示信息中的内容,如下

image.png

下面我们再次使用添加了content-type的ajax方法发送请求到后端服务器,再来试试是否还报这个错误,

10:52:04.72317120 [http-nio-19350-exec-1] ERRORcom.ruoyi.framework.web.exception.GlobalExceptionHandler- [notFount,65] -运行时异常:
org.springframework.http.converter.HttpMessageNotReadableException: JSONparseerror: Cannotdeserializeinstanceof`com.dongao.project.tmupgradeorderrecord.domain.TmUpgradeOrderRecord`outofSTART_ARRAYtoken; nestedexceptioniscom.fasterxml.jackson.databind.exc.MismatchedInputException: Cannotdeserializeinstanceof`com.dongao.project.tmupgradeorderrecord.domain.TmUpgradeOrderRecord`outofSTART_ARRAYtokenat [Source: (PushbackInputStream); line: 1, column: 1]

可以看到已经不再报

Contenttype'application/x-www-form-urlencoded;charset=UTF-8'notsupported

这个错误了,但是报了另外一个错误,下面我们再来说一下另外一个错误的解决办法,

参考博文:

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `com.dongao.project.tmupgradeorderrecord.domain.TmUpgradeOrderRecord` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.dongao.project.tmupgradeorderrecord.domain.TmUpgradeOrderRecord` out of START_ARRAY token

相关文章
|
JavaScript 数据处理
JS 取整,取余操作
JS 取整,取余操作
777 0
|
定位技术 开发者
uni-app获取地理位置
uni-app获取地理位置
2031 0
|
监控 druid
druid 连接池监控报错 Sorry, you are not permitted to view this page.
druid 连接池监控报错 Sorry, you are not permitted to view this page.
2870 0
|
API Java 监控
SpringBoot基于OpenAPI3的接口文档管理快速集成和使用
本文主要简单介绍SpringCloud2023中进行接口文档管理,方便前后端开发和文档维护。文档管理工具基于开源的knife4j封装的openapi3。
2201 3
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
5098 14
|
监控 Java Nacos
使用Spring Boot集成Nacos
通过上述步骤,Spring Boot应用可以成功集成Nacos,利用Nacos的服务发现和配置管理功能来提升微服务架构的灵活性和可维护性。通过这种集成,开发者可以更高效地管理和部署微服务。
5217 17
|
存储 Java 数据库连接
Mybatis-plus@DS实现动态切换数据源应用
Mybatis-plus@DS实现动态切换数据源应用
2392 0
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
3087 0
SpringBoot整合Flowable【07】- 驳回节点任务
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
存储 算法 安全
密码学系列之九:密钥管理
密码学系列之九:密钥管理
3241 45