0

RESTful APIを設計し、次のURIを使用したいと思います

http://[HOST]/[PLANET]/[LAT];[LONG]

例えば

http://myserver/earth/50.2;29.1

Spring MVCでのそのようなメソッドの適切なアノテーションは何ですか?これは次の1つで大丈夫ですか?

@RequestMapping(value = "/{planet}/{lat};{long}", method = RequestMethod.GET)
public String showInfoAboutCoords(
  @PathVariable final String planet, 
  @PathVariable final String lat,
  @PathVariable final String long, 
  final HttpServletResponse response) {
        // Implementation
}

これが大丈夫なら-何のために@MaskFormat("###-##-####")良いですか?

4

1 に答える 1

2

URI パターンには 2 つの問題があります。

  • 一部のサーブレット コンテナーは;区切り文字として扱い、URI をトリミングする場合があります (Tomcat のバグ 30535 など)。したがって、回避策として、 などの別の文字を使用できます,
  • デフォルトでは、Spring MVC は URI のポイントを拡張子セパレータとして扱い、それもトリムします。パス変数に正規表現パターンを指定することでオーバーライドできます。

だから、あなたは次のようなものを持つでしょう

@RequestMapping(value = "/{planet}/{lat:.*},{long:.*}", method = RequestMethod.GET) 

Spring の拡張機能の処理を無効にしたため、必要に応じて手動で有効にする必要があることに注意してください (これには、小数点と拡張セパレーターの混同を避けるために、より制限的な正規表現も必要です)。

@RequestMapping(value = 
    {"/{planet}/{lat:.*},{long:\\d+\\.\\d+}", 
         "/{planet}/{lat:.*},{long:\\d+\\.\\d+}.*"}, 
    method = RequestMethod.GET)

@MaskFormatおそらく、からの注釈を意味します(mvc-showcase組み込みの注釈であることに注意してください)。それに加えMaskFormatAnnotationFormatterFactoryて、パス変数 (つまり文字列) をメソッド引数に変換するための新しいフォーマット機能を示します。実際にはStrings をStrings に変換するため、検証のみに使用されます。

于 2010-09-22T18:06:08.543 に答える