Spring Controller не возвращает данные JSON в угловой вызов HTTP GET - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть пружинный контроллер, который выглядит следующим образом:

@RestController
public class RaceResultController {

    @Autowired
    RaceResultImpl raceResultImpl;

    @GetMapping("/race")
    public ModelAndView hello(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {

        List<RaceTopResult> raceTopResultList = raceResultImpl.getResults();
        ObjectMapper o = new ObjectMapper();
        model.addAttribute("races", raceTopResultList);
        return new ModelAndView("race");


    }
}

Тогда у меня есть некоторый встроенный угловой код в моем представлении race.html:

      <head>
        <title>F1 RESULTS 2018</title>
         <script 


      src=
    "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"> .    
     </script>
      <script 
       src=
    "https://ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.min.js"></script>
     </head>
     <body>
     <header>
        <h1>F1 RESULTS 2018</h1>
     </header>
      <div ng-app="raceApp" ng-controller="raceCtrl">
        <table id="my_table" border = "1">
            <tr ng-repeat="race in races">
                <td>{{ race.driver }}</td>
                <td>{{ race.team }}</td>
            </tr>
        </table>
     </div>

    </body>

    <script>
        var app = angular.module('raceApp', []);
        app.controller('raceCtrl', function($scope, $http) {
            alert("mini");
            $http({
                url: "/race",
                method: "GET",
                dataType: 'json'
                 }).then(function successCallback(response) {
                alert("hi")
                 $scope.races = response.data;
                 }, function errorCallback(response) {
                 alert("bye");
                 $scope.error = response.statusText;
                 });
                   });
                 </script>

Когда я нажимаю/race url в браузере, он всегда переходит в блок обратного вызова с ошибкой, даже если я тестирую свой контроллер отдельноЯ вижу, что он возвращает данные из службы, но я не могу получить данные в угловом http-ответе.Пожалуйста, помогите.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Если вы используете @RestController, не используйте ModelAndView в качестве типа возврата любого из ваших методов.
Сохраните ваш объект в качестве типа возврата, и Spring преобразует его в ответ JSON.

иObjectMapper не требуется, поскольку мы не делаем это вручную, Spring сделает для нас.

Поэтому ваш контроллер должен быть таким, как показано ниже:

@RestController
public class RaceResultController {

    @Autowired
    RaceResultImpl raceResultImpl;

    @GetMapping("/race")
    public List<RaceTopResult>hello(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {

        List<RaceTopResult> raceTopResultList = raceResultImpl.getResults();

        return raceTopResultList;


    }
}
0 голосов
/ 14 декабря 2018

Если вы хотите получить ответ от json, сделайте следующеедля Джексона в зависимости от Maven

Если вы хотите получить обратно представление html с данными модели, используйте это

@Controller //use controller not RestController
public class RaceResultController {

    @Autowired
    RaceResultImpl raceResultImpl;

    @GetMapping("/race")
    public ModelAndView hello(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {

        List<RaceTopResult> raceTopResultList = raceResultImpl.getResults();
       // ObjectMapper o = new ObjectMapper();
        model.addAttribute("races", raceTopResultList);
         return new ModelAndView(model,"race");


    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...