2012-04-28 31 views
0

@RequestMappingで使用しているIDが、1234567812345678abcxyz/abcxy+z$(基本的には自動生成文字列で、/スラッシュ付き)の値を受け入れるという要件があります。@RequestMappingに "/"スラッシュを入れる方法は?

私は形式以下のすべての3のマッピングを試してみましたが、何もうまくいかない:

@RequestMapping(value="abc/action/{id: .+[//]*.*}.{format}", method=RequestMethod.PUT) - 何を負いません。

@RequestMapping(value=" abc/action/{id:.+}.{format}", method=RequestMethod.PUT) - /

@RequestMapping(value=" abc/action/{id:.*}.{format}", method=RequestMethod.PUT)以外のすべてを受け入れ - 私は通常のJavaプログラムで同じ正規表現をしようとすると、それは魔法のように動作し、しかし/

以外のすべてを受け入れます

package miscellenousTest; 
public class RegExTest { 
    public static void main(String[] args) { 
     String s1 ="9876543298765432"; 
     String s2 =" abcxyz/abcxy+z$"; 
     System.out.println(s1.matches(".+[//]*.*")); 
     System.out.println(s2.matches(".+[//]*.*")); 
    } 
} 

私は前の記事のいくつかを見てきましたが、私が探している正確な解決策は何もありません。

誰かがこのポインタでいくつかのポインタ/ソリューションを投げることができればそれは素晴らしいことでしょう。

+1

'/'はバックスラッシュではなく、スラッシュです。 – skaffman

+0

またはスラッシュのみ。しかし、最も強調されているのは、バックスラッシュではありません。 –

+0

次のリクエストをエンコードするフィルターを書くことができます –

答えて

1

URLでデータを送信するときは、スラッシュを使用しないでください。あなたはそれを送る前にそれをurlencodeする必要があります。それはあなたに返される前にデコードされます。

この問題を遭遇すると、時々私はWebセーフな名前を付けます。たとえば、私は時々 "12345/01"のようなIDを送る必要があります。私がURLでウェブ上でそれらを送信するとき、私は "12345_01"と言います。これはウェブセーフIDと呼ばれます。実際のIDが必要なときに_を/と置き換えて変換します。

+0

返信ありがとうございますLowe。しかし、このエンコードとデコードのパターンはややこしいと思われ、クライアントがエンコードされたURLでWebサービスを呼び出すことは常に期待しています。 これ以外の方法がありますか?私の記事で述べたように、私はこのパターンのデータを受け入れるために正規表現を使いこなそうとしましたが、うまくいきませんでした。 –

+0

エンコードされたURLを呼び出さないと、WebセーフIDと実際のIDを別々の2つの概念として扱うことをお勧めします。 IDをフロントエンドに渡すときは、常にWebセーフ(スラッシュなし)を与えてください。内部で作業する場合は、実際のものを使用してください。しかし、私はあまりにも値をエンコードするフロントエンドを求めるとは思わない。彼らはすべてのget要求とその簡単なメソッド呼び出しのためにそれを行う必要があります。残念ながら、xmlには<, >のようなビットです。エンコーディングが必要です。場合によっては、URLを扱うときに予約された文字に合わせて調整しなければならない場合もあります。 –

関連する問題