我经历了很多答案,并且在Google上搜索了很多,但仍然找不到为什么我的帖子请求不起作用的原因。
这是我的jsp:
<div class="container"> <form class="form-signin" ng-controller="MyController"> <h2 class="form-signin-heading">Please sign in</h2> <label for="username" class="sr-only">Username</label> <input type="text" id="username" ng-model="user.name" class="form-control" placeholder="Username" required autofocus> <label for="password" class="sr-only">Password</label> <input type="password" ng-model="user.password" id="password" class="form-control" placeholder="Password" required> <button class="btn btn-lg btn-primary btn-block" ng-click="login()" type="submit">Sign in</button> </form> </div>
这是我的控制器:
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指针异常
java.lang.NullPointerException at java.io.StringReader.<init>(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), })...