Angular http POST到Servlet

我经历了很多StackOverflow的答案并且搜索了很多,但仍然无法找到我的post请求无效的原因。

这是我的jsp:

这是我的控制器:

 app.controller('MyController', function($scope, $http) { $scope.login = function() { console.log($scope.user); $http({ method : 'POST', url : 'login', data : $scope.user, headers: { 'Content-Type': 'application/json' } }).success(function(data) { console.log(data); }).error(function(data) { console.log(data); }); console.log("POST done"); }; }); 

而我的servlet:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("inside do POST"); Gson gson = new Gson(); JsonParser parser = new JsonParser(); JsonObject obj = (JsonObject) parser .parse(request.getParameter("data")); Iterator it = (Iterator) obj.entrySet(); while (it.hasNext()) { System.out.println(it.next()); } System.out.println("over"); } 

我一直得到这个Null指针exception

 java.lang.NullPointerException at java.io.StringReader.(StringReader.java:50) at com.google.gson.JsonParser.parse(JsonParser.java:45) at com.zookeeperUI.controller.Login.doPost(Login.java:40) 

请告诉我这里我做错了什么。

您的请求不包含名为“data”的URL参数,因此request.getParameter(“data”)返回null并且您获得NullPointerException。

您尝试通过URL参数发送Javascript对象,这与非浅层对象不相符。

我建议将数据作为请求有效负载发送:

 JsonObject obj = (JsonObject) parser.parse(request.getReader()); 

在客户端上,您需要确保将数据作为正确的JSON发送:

 $http({ method : 'POST', url : 'login', contentType: 'application/json', data : JSON.stringify($scope.user), })... 

我认为你应该发送数据

 $http({ method : 'POST', url : 'login', data : {data: $scope.user}, headers: { 'Content-Type': 'application/json' } }).success(function(data) { console.log(data); }); 

注意data : {data: $scope.user}

您正在使用POST请求,您的数据将在请求正文中发送 – 而不是作为参数 。 您需要使用request.getReader()读取内容。

 // example using the javax.json.stream package JsonParser parser = Json.createParserFactory().createParser(request.getReader());