2013-01-17 116 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'。我不認爲這些會匹配。