get(/video_list?param=+ JSON.stringify({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';解决案例
时间: 2024-03-01 09:55:46 浏览: 81
可以尝试如下解决方案:
1. 在前端代码中,将请求参数使用encodeURIComponent()方法进行编码,以避免参数中包含特殊字符造成的问题。例如:
```
let param = encodeURIComponent(JSON.stringify({page: this.page}));
axios.get('/video_list?param=' + param).then(response => {
// 处理响应数据
}).catch(error => {
// 处理错误
});
```
2. 在后端代码中,使用@RequestBody注解接收JSON格式的请求参数,并使用Jackson库将JSON格式的参数转换为Map类型。例如:
```
@RequestMapping(value = "/video_list", method = RequestMethod.GET)
public R videoList(@RequestBody String param) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> paramMap = mapper.readValue(param, new TypeReference<Map<String, Object>>() {});
// 处理请求参数
}
```
这样就可以避免将字符串类型的请求参数转换为Map类型时出现的错误了。
相关问题
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>>() {});
// 处理参数
}
```
这样就可以解决这个错误了。
前端使用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'
这个报错的原因是因为前端使用了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();
}
```
阅读全文