Tomcat VueJS axios:如何在 axios POST 方法中读取通过 "data" 传递的字符串?



我正在对tomcat servlet进行axios POST调用。当我检查开发人员工具时,我看到字符串作为请求有效负载发送,但我无法在 Tomcat servlet 中检索字符串。

当我用 PHP 测试它时,我能够检索 json 字符串。

$json_str = file_get_contents('php://input');
echo $json_str; //This works and displays the JSON string

这是我在servlet中尝试过的,请让我知道我的代码可能出了什么问题。

VueJs axios

axios({
method: 'post',
url: urltocall,
data: this.strjson,
params: {
'username': 'test1'
},
config: {
headers: {
'Access-Control-Allow-Origin': 'http://localhost:1337',
'Accept': 'application/json',
'Content-Type': 'application/json'
}
}
})
.then(function (response) { }

Tomcat Servlet

StringBuilder sb = new StringBuilder();
BufferedReader br = request.getReader();
String str;
while( (str = br.readLine()) != null ){ //Not entering this while loop, so "sb" is empty
sb.append(str);
}

在 servlet 中选中"content-length"时,显示通过"data"传递的字符串的正确长度,从而确认字符串在请求对象中可用。但是出于某种奇怪的原因,getReader((没有获取字符串。

感谢您的帮助。

我发现了这个问题。在使用 getReader(( 提取数据之前,我正在从请求对象读取参数。这导致数据被清除。当我将 getReader(( 移到顶部时,给它第一次访问请求对象中的信息,它工作得很好。琐碎的修复,但需要一些时间。希望这对某人有所帮助。

String test = request.getParameter("test");
StringBuilder sb = new StringBuilder();
BufferedReader br = request.getReader();
String str;
while( (str = br.readLine()) != null ){
sb.append(str);
}

StringBuilder sb = new StringBuilder();
BufferedReader br = request.getReader();
String str;
while( (str = br.readLine()) != null ){
sb.append(str);
}
String test = request.getParameter("test");

最新更新