背景:使用AngularJS表单将数据发布到Java servlet。
假设我的$ scope中有一些模型,来自表单,名为firstName:
控制器中的$ http请求:
$http({
method: 'POST',
url: '/CustomerTrackerApp/JSONManager',
params: { firstName: $scope.firstName }
}).then(function(response) {
alert(response.data);
});
Servlet中的doPost()方法:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
String firstName = request.getParameter("firstName");
out.println("From Servlet: " + firstName);
}
这成功提醒"来自Servlet:{在表单中输入的名称}"
我的问题是params: { firstName: $scope.firstName, }
会导致字段显示在网址中,所以我想使用:
$http({
method: 'POST',
url: '/CustomerTrackerApp/JSONManager',
data: { firstName: $scope.firstName }
}).then(function(response) {
alert(response.data);
});
如何在doPost()中获取firstName
的值data: { firstName: $scope.firstName }
并将其保存在数组中?
非常感谢您的帮助,我已经谷歌搜索了一段时间,无法找到答案。
答案 0 :(得分:3)
找到解决方案。在java servlet中,doPost()使用了InputStreamReader和BufferedReader:
InputStreamReader isr = new InputStreamReader(request.getInputStream());
BufferedReader in = new BufferedReader(isr);
String line = in.readLine();
现在,您可以使用JSONObject轻松地将数据作为字符串进行操作:
JSONObject json;
try {
json = new JSONObject(line);
String jsonString = json.toString();
String[] names = JSONObject.getNames(json);
for (int i=0 ; i < names.length ; i++) {
System.out.println(names[i] + " : " + json.getString(names[i]));
}
} catch (JSONException e) { e.printStackTrace(); }