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}});
我只是在做一些测试,这里有一些 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}});