1

私はSpring MVCを使用しており、コントローラーには機能があります:

@ResponseBody
@RequestMapping(value = "/json/negotiation/Supervisor.json", produces = "application/json", method = RequestMethod.POST)
public ExtResponse changeSupervisorStep(@RequestBody BatchModel<Supervisor> supervisors) {...}

クライアント側からリクエストを送信します (ExtJs を使用):

Ext.Ajax.request({
url : '/jur_rest/json/negotiation/Supervisor.json',
jsonData : { supervisors : {toInsert : [], toDelete : [], toUpdate : [] }}
});

3 つの配列を持つオブジェクトを取得します。しかし、クライアントからもう一度モデルを送信したいのですが、そのようなものを書くと:

@ResponseBody
@RequestMapping(value = "/json/negotiation/Supervisor.json", produces = "application/json", method = RequestMethod.POST)

public ExtResponse changeSupervisorStep(@RequestBody BatchModel<Supervisor> supervisors, @RequestBody Supervisor model) { ... }

    Ext.Ajax.request({
    url : '/jur_rest/json/negotiation/Supervisor.json',
    jsonData : { supervisors : {toInsert : [], toDelete : [], toUpdate : [] }, model : {}}
    });

エラー - 400 Bad Request が表示されます。どうしたの?ありがとう。

編集:

Spring の @RequestBody と @RequestParam を学習 する コントローラー関数で使用できる @RequestBody パラメーターは 1 つだけです。1 回のリクエストで 2 つのモデルを渡すにはどうすればよいですか? それらを1つのクラスにまとめますか?

4

2 に答える 2

4

好きなだけパラメーターに注釈を付けることができ@RequestBodyます。ただし、リクエストがJSON次の場合に問題があります。リクエスト全体が1つのオブジェクトです。また、1 つのオブジェクトが 2 つの異なるタイプになることはほとんどありません。状況に応じて、代替手段は次のとおりです。

  • サーバーに送信せずJSON、代わりに urlencoded データを使用します
  • すべてのタイプを含む DTO を使用する
  • 独自のメッセージ コンバーターを作成する

サーバーに送信される2つの異なるモデルを持つIMHOは、設計上の問題です。ですから、私の心からのアドバイスは、それについて考えることです。デザインを簡単に変更できないと仮定すると、私は DTO を使用します。

于 2013-07-11T20:03:25.883 に答える