前端使用get(`/video/video/video_list`, {param: {page: this.page}})后端接受请求public R videoList(@RequestParam(name = "param") Map<String, Object> param报ERROR Failed to convert value of type 'java.lang.String' to required type 'java.util.Map'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.util.Map'
时间: 2024-03-01 18:55:38 浏览: 18
这个报错的原因是因为前端使用了axios的get方法发送了一个对象参数,但是后端用@RequestParam注解接收参数时默认按照字符串处理,导致无法转换为Map类型。
解决方法是在前端使用axios时,将参数序列化为字符串再发送,后端使用@RequestBody注解接收参数,这样就可以将参数转换为Map类型了。
前端代码示例:
```
import qs from 'qs';
axios.get(`/video/video/video_list?param=${qs.stringify({page: this.page})}`)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.log(error);
});
```
后端代码示例:
```
@PostMapping("/video_list")
public R videoList(@RequestBody Map<String, Object> param) {
// 处理参数
return R.ok();
}
```
相关问题
get请求/video_list?param=${page:page}报错
这个错误可能是因为你使用了类似`${page:page}`的语法,但是你的后端服务不支持这个语法。`${page:page}`是一种模板语法,它表示在请求时将`page`参数的值插入到请求的URL中。你需要检查你的后端服务是否支持这种语法,如果不支持,你可以考虑使用普通的URL参数传递方式,例如`/video_list?page=1`。
get(`/video_list`, {param: {page: this.page}}).后端接受请求@RequestMapping(value = "/video_list", method = RequestMethod.GET) public R videoList(@RequestParam(name = "param") Map<String, Object> param报ERROR Failed to convert value of type 'java.lang.String' to required type 'java.util.Map';解决案例
这个错误是因为前端传递的参数是字符串类型,而后端接口需要的是Map类型。可以尝试在前端传递参数时将其转化为JSON对象,然后在后端接口中使用@RequestBody注解将其转化为Map类型。具体解决方案如下:
1. 前端代码:
```
const params = {
page: this.page
};
axios.get('/video_list', { params: { param: JSON.stringify(params) } }).then(res => {
// 处理返回结果
}).catch(err => {
// 处理错误
});
```
2. 后端代码:
```
@RequestMapping(value = "/video_list", method = RequestMethod.GET)
public R videoList(@RequestParam(name = "param") String param) {
Map<String, Object> paramMap = JSON.parseObject(param, new TypeReference<Map<String, Object>>() {});
// 处理参数
}
```
这样就可以解决这个错误了。