背景了解:

同事对代码做了改动,他在后台把原本接收的参数“username”改成了"id",没有把修改的事情通知我。拿到代码运行后发现前台网页的内容显示不完整了。下边是前后对比图

报错信息:

Resolved exception caused by Handler execution: org.springframework.web.bind.MissingServletRequestParameterException: 
Required String parameter 'id' is not present

中文释义:所需的字符串参数“id”不存在

错误分析:

根据控制台报错的内容来看,没有具体指向哪个文件哪个类或者方法,这样的报错很烦,联想到我项目前后运行的效果不一样,猜测可能是和我左侧菜单栏那有关系。去看了一下后台接口接收的参数是“id”,页面上传递的参数是“username”,问题应该是页面传递和后台接收的参数不一致导致

解决办法:

根据业务需求接收参数这里保持不变,接收id

    public List<Resource> getInfo(@RequestParam("id")String id) {
    	logger.debug("data{}",resourceService.get(id)); 
    	return resourceService.get(id);
    }

页面这里传递的参数“username”改为“id”

		created() {
			var user = sessionStorage.getItem('user');
			user = JSON.parse(user);
			let _para = {
				//username: user.username,
                //user对象是登录时存在session里的,直接从session里取出就行
				id :user.id
			};
			this.$fetch('http://' + http.host_port + '/Resource', _para).then(res => {
				if(res) {

				}
			});
		}

刷新页面,发现问题解决了

 

在网上还看到几种情况也会导致这个问题:
(1)头文件类型不对,可以在MediaType中选择合适的类型,例如GET和POST

(2)jquery提交delete时,不支持@RequestParam,只支持@PathVariable形式

(3)api在调用的时候,如果存在重类型,但不重名;例如:/id与/name,两者在类型上是一样的

(4)传递的参数里面包含特殊符号,比如前台传递字符串不能包含逗号等

(5)传的参数是undefined

以上几种情况是网友们遇到的,后期可以证实一下

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐