5

サーバーに送信されたPUTリクエストのキャプチャで問題が発生しました。

これらは私の方法です:

@RequestMapping(method= RequestMethod.GET)  
public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state,  Model model) {
    System.out.println("get request");  
    return "index";  
}


@RequestMapping(method= RequestMethod.PUT)  
public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) {
    System.out.println("put request");
    return "index";
}

呼び出しをトレースしたとき、PUT要求はクラスのPUTメソッドではなく、GETメソッドによって処理されました。画面外では、常に「getrequest」と表示されます。ブラウザのログをチェックして、正しいPUTリクエストが送信されたことを確認したので、ここでSpringの設定を見逃したと思いますが、それが何であるかわかりません。

誰か助けてもらえますか?

ありがとうございました。

編集:クラスの追加コード:

@Controller
@RequestMapping(value="/retail/{cid}/master/city")
public class City {

    @RequestMapping(value="/foo1", method= RequestMethod.GET)  
    public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State")   Integer state,  Model model) {
        System.out.println("get request");  
        return "index";  
    }

    @RequestMapping(value="/foo2", method= RequestMethod.PUT)  
    public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) {
        System.out.println("put request");
        return "index";
    }
}

EDIT2:申し訳ありませんが、ログを調べるときにあまり徹底していなかったようです。この警告を2回キャッチしました。

警告:アノテーション処理のエラー:java.lang.NoClassDefFoundError:org / aopalliance / intercept / MethodInterceptor

それを修正する方法はありますか?

4

2 に答える 2

5

それは解決されます...これは機能する改訂された方法です

@コントローラ
@RequestMapping(value="/retail/{cid}/master/city")
public クラス 都市 {

  @RequestMapping(メソッド= RequestMethod.GET)  
  public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) {
    System.out.println("要求を取得");  
    「インデックス」を返します。  
  }

  @RequestMapping(メソッド= RequestMethod.PUT)  
  public String putCity(@PathVariable(value="cid") String cid, @RequestBody CityData state, Model model) {
    System.out.println(state.getState());
    「インデックス」を返します。
  }
}
public class CityData {
  プライベート文字列状態。
  public String getState() {
    this.state を返します。
  }
  public void setState(文字列の状態) {
    this.state = 状態;
  }
}

を使用することもできます@RequestBody String stateが、上記のサンプルはデータの処理方法を確認するためだけにコードを単純化しすぎているため、CityData オブジェクトを作成することを好みます。

于 2011-04-03T14:39:06.977 に答える
1

マッピング値を指定しなかったことが関係している可能性があります。試してみて @RequestMapping(value="/foo", ...GET)@RequestMapping(value="/foo", ...PUT)それぞれ

ドキュメントには次のように書かれています。

単一のデフォルト メソッド (明示的なパス マッピングなし) がある場合、より具体的なマップされたメソッドが見つからないすべてのリクエストがそれにディスパッチされます。このようなデフォルトのメソッドが複数ある場合は、それらの中から選択する際にメソッド名が考慮されます。

エラーについて - aopalliance jar をクラスパスに追加する必要があります。

于 2011-04-02T14:26:52.633 に答える