Spring MVC+AngularJS-使用json填充数据

Spring MVC+AngularJS-使用json填充数据,angularjs,spring,spring-mvc,Angularjs,Spring,Spring Mvc,我在集成SpringMVC和AngularJS时遇到了这个问题。 我的项目中有以下控制器。 当我去医院的时候http://localhost:8181/{{projectName}}/protected/test这两个方法都应该执行。 但当我转到上面的链接时,只有第一个方法正在执行。第二个方法不执行。我不知道为什么。 在我用作指导的项目中,相同的代码正确工作 @Controller @RequestMapping(value = "/protected/test") public class T

我在集成SpringMVC和AngularJS时遇到了这个问题。 我的项目中有以下控制器。 当我去医院的时候http://localhost:8181/{{projectName}}/protected/test这两个方法都应该执行。 但当我转到上面的链接时,只有第一个方法正在执行。第二个方法不执行。我不知道为什么。 在我用作指导的项目中,相同的代码正确工作

@Controller
@RequestMapping(value = "/protected/test")
public class TestController {


    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView welcome() {
        return new ModelAndView("testPage");
    }

    @RequestMapping(method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<?> listAll(@RequestParam int page,Locale locale) {
        return createListAllResponse(page,locale);
    }

更新:我完全糊涂了。我花了几天时间进行故障排除,但解决方案是添加函数调用:$scope.getRecordList

您对SpringMVC的工作方式感到困惑。Spring永远不会为每个请求调用多个RequestMapping注释方法。我在这里找到了下一条语句:第二个方法没有定义URL,但是Spring有一种方法知道它应该调用哪个方法。请注意,welcome和listAll两个方法都有一个具有相同URL的GET方法。使这两种方法不同的是属性products=“application/json”,该属性通知Spring,如果请求等待json作为响应,则应调用第二种方法。是的,将调用第二种方法。。。而不是第一个。控制器方法为请求生成响应。一个请求不能有两个响应。在这个项目中,我在调试时看到这两个方法一个接一个地调用。但在我的项目中,只有第一个方法是调用。或者,可能发生了一些重定向?也许,myController有什么问题吗?如果两个方法都被调用,那么将发送两个请求。你的控制器没有问题。
 <property name="mediaTypes">
            <map>
                <entry key="xml" value="text/xml"/>
                <entry key="json" value="application/json"/>
                <entry key="html" value="text/html"/>
                <entry key="less" value="text/html"/>
            </map>
 </property>
    function myController($scope, $http) {
        $scope.pageToGet = 0;

        $scope.state = 'busy';

        $scope.lastAction = '';

        $scope.url = "/{{projectName}}/protected/test/";

        $scope.record = {}

        $scope.getRecordList = function () {
            var url = $scope.url;
            $scope.lastAction = 'list';

            $scope.startDialogAjaxRequest();

            var config = {params: {page: $scope.pageToGet}};

            $http.get(url, config)
                .success(function (data) {
                    $scope.finishAjaxCallOnSuccess(data, null, false);
                })
                .error(function () {
                    $scope.state = 'error';
                });
        }


        $scope.populateTable = function (data) {

                $scope.page = {source: data.records};

        }

         $scope.startDialogAjaxRequest = function () {
            $scope.displayValidationError = false;
            $("#loadingModal").modal('show');
            $scope.previousState = $scope.state;
            $scope.state = 'busy';
        }

        $scope.finishAjaxCallOnSuccess = function (data, modalId, isPagination) {
            $scope.populateTable(data);
            $("#loadingModal").modal('hide');

            if(!isPagination){
                if(modalId){
                    $scope.exit(modalId);
                }
            }

            $scope.lastAction = '';
        }
    $scope.getRecordList();
}