Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Angularjs-Spring MVC集成_Spring Mvc_Angularjs_Restful Architecture - Fatal编程技术网

Spring mvc Angularjs-Spring MVC集成

Spring mvc Angularjs-Spring MVC集成,spring-mvc,angularjs,restful-architecture,Spring Mvc,Angularjs,Restful Architecture,我正在尝试将AngularJS与Spring MVC集成;但我不能将参数作为RequestBody发布到spring控制器。有人能帮我实现同样的目标吗。下面是我的程序的简要流程 执行数据输入后,执行TodoNewController。从这里我调用用户定义的方法“create”,我在services.js中定义了该方法。根据之后的流程,它应该调用TodoController.java的create方法以及输入参数;但事实并非如此。谁能告诉我代码有什么问题吗。下面是相同的代码 controller.

我正在尝试将AngularJS与Spring MVC集成;但我不能将参数作为RequestBody发布到spring控制器。有人能帮我实现同样的目标吗。下面是我的程序的简要流程

执行数据输入后,执行TodoNewController。从这里我调用用户定义的方法“create”,我在services.js中定义了该方法。根据之后的流程,它应该调用TodoController.java的create方法以及输入参数;但事实并非如此。谁能告诉我代码有什么问题吗。下面是相同的代码

controller.js

function TodoNewController($scope, $location, Todo) {

    $scope.submit = function () {

        Todo.create($scope.todo, function (todo) {

            $location.path('/');

        });

    };

    $scope.gotoTodoListPage = function () {

        $location.path("/")

    };

}
angular.module('todoService', ['ngResource']).

        factory('Todo', function ($resource) {

            return $resource('rest/todo/:id', {}, {

                'create': {method:'PUT'}

            });

        });
services.js

function TodoNewController($scope, $location, Todo) {

    $scope.submit = function () {

        Todo.create($scope.todo, function (todo) {

            $location.path('/');

        });

    };

    $scope.gotoTodoListPage = function () {

        $location.path("/")

    };

}
angular.module('todoService', ['ngResource']).

        factory('Todo', function ($resource) {

            return $resource('rest/todo/:id', {}, {

                'create': {method:'PUT'}

            });

        });
TodoController.java

@Controller

public class TodoController {

    private static final AtomicLong todoIdGenerator = new AtomicLong(0);

    private static final ConcurrentSkipListMap<Long, Todo> todoRepository = new                ConcurrentSkipListMap<Long, Todo>();

    @RequestMapping(value = "/todo", method = RequestMethod.PUT)

    @ResponseStatus(HttpStatus.NO_CONTENT)

    public void create(@RequestBody Todo todo) {

        long id = todoIdGenerator.incrementAndGet();

        todo.setId(id);

        todoRepository.put(id, todo);

    }

}
@控制器
公共类TodoController{
专用静态最终AtomicLong todoIdGenerator=新AtomicLong(0);
私有静态最终ConcurrentSkipListMap todoRepository=新ConcurrentSkipListMap();
@RequestMapping(value=“/todo”,method=RequestMethod.PUT)
@ResponseStatus(HttpStatus.无内容)
创建公共void(@RequestBody Todo Todo){
long id=todoIdGenerator.incrementAndGet();
todo.setId(id);
todoRepository.put(id,todo);
}
}

修改请求映射以匹配实际映射
/rest/todo
,并将数据绑定更改为使用@modeldattribute

 @RequestMapping(value = "/rest/todo", method = RequestMethod.PUT)
 @ResponseStatus(HttpStatus.NO_CONTENT)

    public void create(@ModelAttribute Todo todo) {

        long id = todoIdGenerator.incrementAndGet();

        todo.setId(id);

        todoRepository.put(id, todo);

    }

Spring期望
application/x-www-form-urlencoded
作为请求的内容类型。您可以尝试将
$http
注入服务并调用
$http.defaults.headers.put[“Content Type”]=“application/x-www-form-urlencoded”在它的开头。

首先隔离问题。是弹簧还是角度导致了问题?我建议您在Chrome或FireFox中安装Rest客户端插件。然后创建一个PUT请求并输入正确的端点URL。如果您能够收到正确的响应,则表示您的角度请求构造不正确

现在,运行基于Angular的客户端。提出请求。检查发送的参数和请求(在Chrome中,您可以使用开发人员工具),并查看它是否与您先前发送的请求匹配。如果是这样,那么它应该会起作用。如果没有,那么你知道问题所在

此外,您的角度资源:

$resource('rest/todo/:id')
与Spring控制器中的URL不同

@RequestMapping(value = "/todo", method = RequestMethod.PUT)

因此,第一个类似于“rest/todo/1”,而第二个类似于“/todo”。我认为这两个条件不匹配。

通过电话线发出的请求是什么样的?你能用firebug和post检查一下吗?请求URL-方法-发布数据内容(根据firebug)类型:application/json;charset=utf-8{“title”:“rtrr”,“description”:“rtttrtrt”}