@RequestParam无法获取参数

本文深入解析了@RequestParam与@RequestBody注解的区别,强调了前者适用于application/x-www-form-urlencoded数据格式,而后者则适用于application/json格式。详细阐述了在不同数据传递方式下如何正确选择和使用这两个注解。

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

application/x-www-form-urlencoded是以表格的形式请求,而application/json则将数据序列化后才进行传递,如果使用了@RequestParam会在Content里面查找对应的数据,结果因为传递的数据已经被序列化所以不能找到,所以当要使用@RequestParam注解时候应当使用application/x-www-form-urlencoded,而如果想要使用application/json则应当使用@RequestBody获取被序列化的参数
 

### 解决 `RequestParam` 无法正确获取特殊字符的问题 当遇到 `RequestParam` 无法正确获取 URL 中携带的特殊字符时,通常是因为编码设置不一致造成的。浏览器默认会按照 UTF-8 编码提交数据,而服务器端可能采用其他编码方式解析这些数据。 为了确保客户端和服务器之间能够正确传递带有特殊字符的数据,在配置文件中统一设定编码格式是非常重要的措施之一[^3]。具体做法如下: #### 方法一:全局配置编码过滤器 可以在 web.xml 文件里加入 CharacterEncodingFilter 来强制指定整个应用都使用相同的字符集进行编解码操作。 ```xml <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` #### 方法二:局部调整 Controller 处理逻辑 如果不想影响到所有的请求,也可以只针对特定接口做单独处理。比如在接收到参数前先对其进行一次URLDecoder.decode() 转换。 ```java import java.net.URLDecoder; //... @PostMapping("/example") public ResponseEntity<?> example(@RequestParam String param){ try { String decodedParam = URLDecoder.decode(param,"UTF-8"); // 继续业务逻辑... } catch (UnsupportedEncodingException e) { log.error(e.getMessage(),e); return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } } ``` 另外需要注意的是,前端页面也需要保证是以正确的编码方式进行表单提交,这样才能从根本上解决问题[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值