3

AngularJSをSpringMVCと統合しようとしています。しかし、RequestBodyとしてスプリングコントローラーにパラメーターを投稿することはできません。誰かが私が同じことを達成するのを手伝ってくれますか?以下は私のプログラムの簡単な流れです。

データ入力を行った後、TodoNewControllerが実行されます。ここから、 services.jsで定義したユーザー定義メソッド「 create」を呼び出します。この後のフローに従って、 入力パラメータとともに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("/")

    };

}

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

    }

}
4

3 に答える 3

2

Spring はapplication/x-www-form-urlencoded、リクエストの Content-Type として期待します。サービスに注入$httpして、その開始時に呼び出すことができ$http.defaults.headers.put["Content-Type"] = "application/x-www-form-urlencoded";ます。

于 2013-01-21T09:22:18.783 に答える
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);

    }
于 2013-01-17T09:50:39.657 に答える
0

最初に問題を特定します。問題を引き起こしているのはSpringまたはAngularですか? Chrome または FireFox に Rest クライアント プラグインをインストールすることをお勧めします。次に、PUT 要求を作成し、正しいエンドポイント URL を入力します。正しい応答を受け取ることができる場合は、Angular リクエストが正しく構築されていないことを意味します。

次に、Angular ベースのクライアントを実行します。PUT リクエストを行います。送信されたパラメーターとリクエスト (Chrome では開発者ツールを使用できます) を検査し、以前に送信したリクエストと一致するかどうかを確認します。もしそうなら、それはうまくいくはずです。そうでない場合は、問題を知っています。

また、Angular リソース:

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

Springコントローラーにあるものとは異なるURLを持っています

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

前者は 'rest/todo/1' のようなもので、後者は '/todo' です。それらは一致しないと思います。

于 2013-04-25T05:39:11.573 に答える