解决Required XXX parameter ‘XXX‘ is not present问题
程序员文章站
2022-07-15 13:18:44
...
问题
目前项目采用的是Vue+SpringCloud,因此请求接口采用的是Axios
首先,我们用F12来分析一下接口请求,因为目前后端并未做请求头的限制,所以初步分析问题的出现应该是受以下结构影响
请求结构
//前端接口请求的请求方式与关键请求头
......
Request Method: PUT
Content-Type: application/json;charset=UTF-8
......
//前端接口请求参数
{id:2,username:"admin"}
后端接口请求接收
/*
第一种接收方式(因为无法获取到相关参数,直接报错,也就是:
Required XXX parameter 'XXX' is not present)
*/
@PutMapping
public Result test(@RequestParam("id") Long id,@RequestParam("username") String username){
//业务操作
......
}
/*
第二种接收方式(虽然不会报错,但得到的参数为null)
*/
@PutMapping
public Result test(Long id,String username){
//业务操作
......
}
/*
第三种接收方式(一切正常)
*/
@PutMapping
public Result test(@RequestBody User user){
//业务操作
......
}
/*
第四种接收方式(如果去掉@RequestBody,虽然不会报错,但得到的参数为null)
*/
@PutMapping
public Result test(User user){
//业务操作
......
}
User.java
public class User{
private Long id;
private String username;
......
}
问题解决
以上存在的问题,是因为请求无法传递json格式数据,因此需要将json格式数据转换为字符串或者用,FormData的方式进行传递,经过测试不同解决方案适用不同的请求接收方式,比如:
//出现问题的传参方式
const params = {id: 2,username: "admin"};
//第一种方式(该解决方案仅适用第三种请求方式)
const params = JSON.stringify({id: 2,username: "admin"});
//第二种方式(该解决方案适用以上四种请求方式)
const formData = new FormData();
formData.append("id",2)
formData.append("username","admin")
推荐阅读
-
解决mysql创建数据库后出现:Access denied for user 'root'@'%' to database 'xxx'的问题
-
解决 django.db.utils.InternalError: (1054, “Unknown column ‘xxx.字段‘ in ‘field list‘“) 问题
-
[C#] 解决Silverlight反射安全关键(SecuritySafeCritical)时报“System.MethodAccessException: 安全透明方法 XXX 无法使用反射访问”的问题
-
Parameter 0 of method setFunctionDomainRedisTemplate in XXX required a single bean, but 2 were found
-
报错: required string parameter XXX is not present
-
请求报错Required String parameter 'xxx' is not present
-
Spring请求问题之MissingServletRequestParameterException: Required xxx parameter ‘xxx’ is not present
-
解决Required XXX parameter ‘XXX‘ is not present问题
-
Parameter 1 of constructor in com.xxx.controller.Xxx required a bean of type
-
Required String parameter 'XXX' is not present