首页 > 解决方案 > 如何从角度发送可选参数并在 Java 控制器中捕获它们?

问题描述

我正在尝试向 Spring Controller 发送“搜索”参数,但不断收到 400 bad request 。我试过@RequestParam("personalNumber")String personalNumber了,但它仍然不起作用,所以现在我正在尝试获取包装器,你能建议如何将包装器信息发送到 Java 控制器吗?(包装器有其他类的实例)

AngularJs

angular.extend($scope, {
    obj:{
        personalNumber:"",
        firstName:"",
        lastName:"",
        dateFrom:"",
        dateTo:""
    },

    loadCarLoan: urls.BASE_API + "user/getOnlineApplicationList",
    carLoanList:[

    ],

});


$scope.getCarLoan =  function () {
    $(".loader").show();
    console.log("In the angular");
    $http.post($scope.loadCarLoan + $.param($scope.obj))
      .success(function (response) {
        console.log(response);
        if(response.success){
            $scope.carLoanList = response;
        }
        $(".loader").hide();
    }).error(function () {
        $(".loader").hide();
        $scope.carLoanList = [];
    })
};

$scope.filter = function () {
    $scope.getCarLoan();
};

Java 控制器:

@RequestMapping(value = "user/getOnlineApplicationList", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, method = RequestMethod.POST)
public @ResponseBody String getOnlineApplicationList(HttpSession session,
                                                     @RequestBody OnlineApplicationListWrapper wrapper) {

    System.out.println("In the Controller Java");

    HashMap<String, Object> jsonMap = new HashMap<>();

    Car car = wrapper.getCar();
    Loan loan = wrapper.getLoan();
    CustPaymentPlan cpp = wrapper.getCpp();
    NaturalPerson np = wrapper.getPerson();

    jsonMap.put("success", "true");
    jsonMap.put("car", car);
    jsonMap.put("loan", loan);
    jsonMap.put("cpp", cpp);
    jsonMap.put("np", np);

    System.out.println(wrapper.getCar().toString());
    System.out.println(wrapper.getLoan().toString());
    System.out.println(wrapper.getCpp().toString());
    System.out.println(wrapper.getPerson().toString());
    System.out.println("========");
    System.out.println(gson.toJson(jsonMap));

    return gson.toJson(jsonMap);

}

标签: javaangularjs

解决方案


你需要改变:

@RequestParam("personalNumber") String personalNumber

至:

@RequestParam(value = "personalNumber", required = false) String personalNumber

required = false表明该参数可以是可选的。

无需创建包装器


推荐阅读