Angular Jersey 方法的 JS 表单数据 post 在查询参数上给出 null

Angular JS form data post to Jersey method is giving null on Query Parameter

我只是在做一些测试,这里有一些 Javascript,它使用 Angular JS 来 post 一些表单数据:

<!DOCTYPE html>
<html>
    <head>
        <title>Add a course</title>
        <script type="text/javascript" src="../angular.js"></script>
    </head>

    <body ng-app="form">
        <div ng-controller="formController">
            <form class="course-form">
                Name: <input type="text" ng-model="course.name" /><br />
                Duration: <input type="text" ng-model="course.duration" /><br />
                Fee: <input type="text" ng-model="course.fee" /><br />
                <input type="button" ng-click="add(course)" value="Add course" />
            </form>
        </div>

    <script>
        angular.module('form', [])
            .controller('formController', ['$scope', '$http', '$log', function($scope, $http, $log) {

                $scope.add = function(courseData) {
                    var url = "http://localhost:8080/CourseService/courseService/newcourse";

                    var request = $http({method: 'POST', url: url, data:{name: courseData.name, duration: courseData.duration, fee: courseData.fee}});

                    request.success(
                        function(html) {
                            alert("it succeeded");
                        }
                    );

                    request.error(
                        function(html) {
                            alert("it didn't work");
                        }
                    );

                };
        }]);
    </script>

    </body>
</html>

这是数据 posted 到的方法:

    @POST
    @Path("/newcourse")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response newCourse(@QueryParam("name") String name, @QueryParam("duration") String duration, @QueryParam("fee") int fee) {

        System.out.println(name+""+duration+""+fee);
        return Response.status(200).build();

    }

问题是当我打印这些值时,除了费用为 0 之外,它们都是空的,这是为什么?我已经检查了 posted 的值,它们很好并且填充了。

我确实有其他方法或者写了上面的服务方法,比如使用@FormData,我也可以把路径改成:`("/newcourse/{name}/{duration}/ {fee}"), 和 URI 编码的值,但这只是我最终测试它的方式。

如果您希望数据作为查询参数接收,(即请求的 URL 将类似于 http://localhost:8080/CourseService/courseService/newcourse?name=123&duration=456&fee=789),您必须使用 params 选项发送它们,而不是data 的,指定请求正文:

var request = $http({method: 'POST', url: url,
    params:{name: courseData.name, duration: courseData.duration, fee: courseData.fee}});