我正在尝试从角度JS $http
服务中获取参数,以使用** @queryParam**
来休息服务。我需要获取大量参数(下面以3为例显示,但是我需要使用大约12-15个我需要传递给java端),所以使用@QueryParam获取所有参数使代码看起来很漂亮我正在使用GET
。
如何优化此功能?
示例我在做什么 -
Angular Js代码 -
$http({
url: someUrl,
method: "GET",
params: {filter1: $scope.filter1,
filter2:$scope.filter2,
filter3:$scope.filter3
});
Java方面 -
@path("/getAllData")
@GET
@Produces({..}
public response getAllData(@QueryParam("filter1") final String filter1,
@QueryParam("filter2") final String filter2,
@QueryParam("filter3") final String filter3){
}
另外,想要了解我在构建URL而不是params对象时的优化,并选择@PathParam
$http.get('rest/test/getAllData/?filter1='$scope.filter1 +
'&filter2='$scope.filter2 + '&filter3='$scope.filter3 +
'&filter4='$scope.filter4)
我可以通过在@QueryParam中单独传递来实现。当我们有大量参数时,我正在寻找优化的代码。
答案 0 :(得分:0)
创建一个包含所有必需参数的POJO。
在角度中,执行此操作
var obj = {};
obj.filter1 = $scope.filter1;
obj.filter2 = $scope.filter2;
obj.filter3 = $scope.filter3;
$http({
url: someUrl,
method: "GET",
params: obj
});
您可以接受这样的所有参数 -
@path("/getAllData")
@GET
@Produces({..}
public response getAllData(MyPojo obj){
//String filter1 = obj.filter1;
}
答案 1 :(得分:0)
您可以通过两种方式实现:
1)org.json.simple.JSONObject
。
2)Bean或POJO类。
AngularJS控制器:
var URL = appURL+'/adm/addCollProcess.do';
var json = {"col_pro_id":$scope.col_pro_id, "col_code": $scope.col_code, "exam_type_ids": $scope.exam_types.toString().replace("[","").replace("]",""),
"created_by" : "admin", "file_path" : $scope.file_path, "website" : $scope.website, "facebook" : $scope.facebook};
// using JSONObject
$http.post(URL, json).then(function(response){
if(response.data){
// Code
}
});
// using Bean Class
$http.post(URL, JSON.stringify(json)).then(function(response){
if(response.data){
// Code
}
});
Java控制器:
// using JSONObject
@RequestMapping(value="/addCollProcess.do", method=RequestMethod.POST)
public boolean addCollProcess(@RequestBody JSONObject json){
// Code
}
// using Bean Class:
@RequestMapping(value="/addCollProcess.do", method=RequestMethod.POST)
public @ResponseBody boolean addCollProcess(@RequestBody AdmissionProcessBean processBean) {
// Code
}