3

私のアプリケーションでは、リクエストを次のようにマッピングしたコントローラーで 3 つの製品を比較する必要があります。

@RequestMapping(value = "/products/{proId1}Vs{proId2}Vs{proId3}", method = RequestMethod.GET)
public ModelAndView compareThreeProducts(@PathVariable("proId1") int id1, @PathVariable("proId2") int id2, @PathVariable("proId3") int id3)
{
   //someLogic

私のURL(http://something/products/12Vs13Vs14)にアクセスすると

http 400 エラーが発生します

私も2つの @pathVariable のように試しました

@RequestMapping(value = "/products/{proId1}Vs{proId2}", method = RequestMethod.GET)
public ModelAndView compareTwoProducts(@PathVariable("proId1") int id1, @PathVariable("proId2") int id2) 

これは正常に動作していますが、なぜ私は3つの変数で問題に直面していて、サーバーログにもエラーがないので、バグを見つける方法.

解決策はありますか??

4

3 に答える 3

3

here で説明されているように、各パス変数が一致する正規表現を明示的に指定するのはどうですか?

@RequestMapping(value = "/products/{proId1:\d+}Vs{proId2:\d+}Vs{proId3:\d+}", method = RequestMethod.GET)

于 2011-10-27T08:01:55.107 に答える
1

すべてを 1 つのパス変数にまとめてから、手動で解析することができます。

@RequestMapping(value = "/products/{compareIdString}", method = RequestMethod.GET)
public ModelAndView compareThreeProducts(@PathVariable("compareIdString") String compareIdString)
{
    // split compareIdString on "Vs"
    // parse each resulting value to an int

ただし、これは解決策というよりも回避策です。何が問題なのかを正確に把握したい場合は、Bozho が提案したように、Spring コードでデバッグすることをお勧めします。

于 2011-08-11T19:29:54.103 に答える
0
  • 問題が応答にないことを確認してください - メソッドにブレークポイントを置き、それが呼び出されるかどうかを確認してください
  • 何らかの兆候がないかログファイルを確認してください
  • セパレータとしてスラッシュを使用する/products/{p1}/{p2}/{p3}か、/products/{p1}/vs/{p2}/vs/{p3}
于 2011-08-11T16:03:14.950 に答える