2012-02-17 9 views
0

Spring PathVariableとほぼ同じシステムを実装する必要があります。URLからのパス変数の解析

定義:

blog-{String}-{Integer} 

コード:

Pattern p = Pattern.compile("\\{.+?\\}"); 
Matcher m = p.matcher(pathFormat); 
while(m.find()) 
{ 
    String group = m.group(); 
    // ... 
} 

しかし、どのように私は私のフォーマットで実際のURLを解析することができます私は自分のURL定義を解析する方法を知っていますか?実際のURLが同じ場合は

blog-my-first-blogging-10001 

リアルURLには角カッコが付いていませんグループのタイプは知られていますが、角かっこなしでどのように一致させるのですか?

答えて

2

たぶんビット愚かな、しかし、なぜしようとしない:

String restOfPath = pathFormat.substring(5); //eliminate 'blog-' prefix 
int lastDash = restOfPath.lastIndexOf('-'); //find the last '-' 
String title = restOfPath.substring(0, lastDash); // take what's before '-' 
String id = restOfPath.substring(lastDash + 1); // take the rest. 

あなたのパスがblog-{String}-{Integer}より複雑にならない限り、正規表現は必要ありません。

+0

Thanxは入力用ですが、Spring PathVariableのようにほぼ可能なURLに一致する汎用ソリューションが必要です。 – newbie

+0

@newbieキャプチャしている文字列にパス区切り文字を含めることができます。 AFAIK springとおそらく 'word/a/lot/of/words/anotherword'を' word/{something}/anotherword'にマッチさせようとすると、URIテンプレートのすべての実装がborkになります。あなたの場合、スラッシュの代わりにダッシュだけを使用します。 – soulcheck

+0

申し訳ありません、そうです、URLテンプレートにはセパレータが必要です。私はそれを逃しました。 – newbie

1

それはあなたがやろうとしているもの(少なくとも私には)明確ではないが、ここで私は春のパス変数を使用する方法である:

@RequestMapping(value = "/{MyBlog}/{myVar}", method = RequestMethod.GET) 
public ModelAndView getBlog(@PathVariable final String MyBlog, @PathVariable final Integer myVar) { 
    final ModelAndView mav = new ModelAndView(MyBlog); 
    mav.addObject("myVar", myVar); 
    // in actuality do lots of other thigns 
    return mav; 
} 

そして、それは21が任意のできるURL http://myApp.com/AnyBlogName/21を使用してアクセスうnumber、AnyblogNameは必要な文字列にすることができます。