最近做一个博客项目,用axios向后端springboot发送带参请求一直报“HTTP Status 400 -Required String parameter xxx is not present类型异常”,经过一番研究,终于解决。
1.错误写法
前端axios请求函数:
import axios from 'axios'
export function postMd(value){
return axios.post('/saveMd', {
content: value
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
}
前端vue具体请求:
<script>
//取得postMd函数
import {postMd} from '@/api/article'
export default {
data(){
return {
value: '123',
}
},
methods:{
save(value){
//发送axios的post带参请求,content=value
var result=postMd(value);
console.log(result);
}
}
}
</script>
后端springboot接收:
@RestController
public class ArticleController {
//这里用"api"+"/saveMd"是在vue中用代理的方法解决了跨域问题,前面都要加/api
@RequestMapping("/api/saveMd")
public String saveMd(@RequestParam String content){
System.out.println(content);
return "okok";
}
}
结果后台一直报错:
Required String parameter 'content' is not present
2.解决方法
分析了一下原因,原来用axios带参请求,前端传来的是json字符串,
难怪后台springboot 用@RequestParam获取不到,需要用@RequestBody接收。
后端做如下修改:
@RestController
public class ArticleController {
@RequestMapping("/api/saveMd")
//注意用@RequestBody接收json格式参数
public String saveMd(@RequestBody String content){
System.out.println(content);
return "okok";
}
}
修改完后一切正常。
之后有一篇博文综合阐释了axios带参请求的前后端正确写法,参考如下:
https://www.cnblogs.com/nongzihong/p/12886684.html