簡體   English   中英

如何通過數據響應將數據從Spring控制器發送到angularjs控制器

[英]how to send data from spring controller to angularjs controller with response of data

控制器代碼

@RequestMapping(value="/welcomes", method = RequestMethod.GET, produces="MediaType.application/json")
    public @ResponseBody ModelAndView welcome(@ModelAttribute UserBean userBean)
    {
        List<UserBean> usernames=new ArrayList<UserBean>();
        usernames = retrievedataservice.findAllUsers(userBean);
        System.out.println(usernames.size());
        return new ModelAndView("welcomes", "usernames", usernames);
    }

角度js代碼

<script>
var app = angular.module('myApp', []);
app.controller('UserController', function($scope, $http, $location){
    $scope.usernames=[];
        var url = $location.absUrl() + "http://localhost:8080/SpringAngular/welcomes";
        $http.get(url).then(function (response) 
        {
            $scope.usernames = response.records;
        },function error(response) 
        {
            $scope.postResultMessage = "Error with status: " +  response.statusText;
        });
});
</script>
<div data-ng-app="myApp" data-ng-controller="UserController">
   <table border="1" width="50%" height="50%"> 
    <tr><th>user_name</th><th>phone</th><th>email</th></tr>
     <tr data-ng-repeat="user in usernames">
     <td>{{user.username}}</td>
      <td>{{user.phone}}</td>
       <td>{{user.email}}</td>
       </tr>   
   </table>   

實際上,控制器返回數據列表,但是angular js無法獲取數據。 它返回空值。 它不能與angular js和controller集成。

當您將方法注釋為@ResponseBody時,此方法將不起作用,因此它將在主體中發送響應,但是您將返回modelandview,這顯然將不起作用。

Angular不需要對modelandview做任何事情,但是它期望json響應,因此可以進行映射。

因此,通過發送List<UserBean>作為響應,更改如下所示的方法。

@RequestMapping(value="/welcomes", method = RequestMethod.GET, produces="MediaType.application/json")
    public @ResponseBody List<UserBean> welcome(UserBean userBean)
    {
        List<UserBean> usernames=new ArrayList<UserBean>();
        usernames = retrievedataservice.findAllUsers(userBean);
        System.out.println(usernames.size());
        return usernames;
    }

上面的更改足以使響應正確返回到調用環境,但是您需要確保正確單擊該方法。

正如@Dmitry所建議的那樣, var url = $location.absUrl() + "http://localhost:8080/SpringAngular/welcomes"; 可能不正確。

您的控制器未達到您的期望:用@ResponseBody注釋方法會將方法的返回值包裝在響應主體中,並且produces屬性錯誤。 嘗試這樣的事情:

@RequestMapping(value="/welcomes", method = RequestMethod.GET, produces="application/json")
    public @ResponseBody Object welcome(@ModelAttribute UserBean userBean)
    {
        List<UserBean> usernames=new ArrayList<UserBean>();
        usernames = retrievedataservice.findAllUsers(userBean);
        System.out.println(usernames.size());
        return usernames; // you can also do ResponseEntity.ok().body(usernames)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM