2013-01-17 110 views
3

我正在尝试将AngularJS与Spring MVC集成;但我无法将参数作为RequestBody发布到弹簧控制器。有人能帮助我达到同样的效果吗?下面是我的程序的简要流程。Angularjs - Spring MVC集成

做数据录入TodoNewController后得到执行。从这里,我呼吁用户定义的方法“创建”这是我在services.js定义。按照在此之后,流应该调用与输入PARAMS沿创建方法TodoController.java的;但它没有发生。有人能让我知道代码有什么问题吗?以下是相同的代码。

controller.js

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

    $scope.submit = function() { 

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

      $location.path('/'); 

     }); 

    }; 

    $scope.gotoTodoListPage = function() { 

     $location.path("/") 

    }; 

} 

services.js

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); 

    } 

} 

回答

0

沫不同请求映射以匹配实际映射/rest/todo并将数据绑定更改为使用@ModelAttribute。

@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); 

    } 
+0

请求看起来像通过电线?你可以检查它与萤火虫和后? –

+0

请求URL - HTTP://本地主机:9090/Angular_Spring_Hibernate /休息/待办事项 方法 - PUT POST数据内容(按照萤火虫) 类型:application/JSON;字符集= UTF-8 { “标题”: “rtrr”, “说明”: “rtttrtrt”} – Ravi

2

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

0

第一隔离问题。是Spring还是Angular导致了这个问题?我建议你在Chrome或FireFox中安装一个Rest客户端插件。然后创建一个PUT请求并输入正确的端点URL。如果您能够收到正确的回复,那么这意味着您的Angular请求构造不正确。

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

此外,您的角资源:

$resource('rest/todo/:id') 

有不同的URL比你有你的春天控制器什么

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

所以第一个是像 '休息/ TODO/1'后者是'/ todo'。我不认为这些会匹配。