24

RESTプロジェクトでJerseyを使用しており、正規表現を使用する必要があります。

それについて掘り下げるのは簡単です:

@Path("/resources")
public class MyResource {

   @GET
   @Path("{subResources:.*}")
   public String get(@PathParam("subResources") String subResources) {...}
}

しかし、このようにすると、メソッドは1 つのパラメーターを渡した場合にのみリクエストを取得します。例:

GET: .../resources/firstSubResource

複数のパラメーターを使用すると、メソッドはリクエストを取得しません。例:

GET: .../resources/firstSubResource/seccondSubResource/thirdSubResource


@Path に変数またはテキスト値が含まれている場合にのみ、正規表現を使用できます。例:

@Path("{SubResource1}/{subResources:.*}")

または

@Path("/hardCodeString/{subResources:.*}")

今日、私はこの変数の解決策を実行できましたが、私の観点では問題ありません。


私の web.xml

(...)
    <servlet>
        <servlet-name>Jersey Spring Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.myproject.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Spring Web Application</servlet-name>
        <url-pattern>/1.0/*</url-pattern>
    </servlet-mapping>
(...)

質問

  • 誰かが何かに関連して働いたことがありますか?
  • 私は何か間違ったことをしていますか?
  • これは、1 つ以上の @Path、1 つがクラス内、もう 1 つがメソッド内で作業している場合、バグである可能性があると思います。
  • どんなヒントでも大歓迎です!

よろしく

4

4 に答える 4

21

JAX-RS 1.1 の概要に記載されている正規表現を使用してみてください。

あなたの場合、コードスニペットは以下のようになります

@Path("resources/")
public class MyResource {

   @GET
   @Path("{subResources: [a-zA-Z0-9_/]+}")
   public String get(@PathParam("subResources") String subResources) {...}
}

それが役立つことを願っています。

于 2010-10-08T08:52:36.283 に答える
7

@PathParamアノテーションを削除して、代わりにUriInfoでパスを取得してみてください:

@Context UriInfo uriInfo;

@GET
@Path("{subResources:.*}")
public String get() 
{
    String path = uriInfo.getPath();
}

理由はわかりませんが、私のアプリケーションでは機能します。

于 2011-03-16T09:57:36.900 に答える
0

何らかのトークンで区切られた subResources のコレクションを表す単一の PathParam を受け入れることに反対しますか?

例えば ​​...

@Path("/リソース)
パブリッククラス MyResource {

   @得る
   @Path("{subResources}")
   public String get(@PathParam("subResources") String subResources)
   {
      String[] params = StringUtils.split(subResources, ";");
   }
}

..処理する必要があります

GET: .../resources/firstSubResource
&
GET: .../resources/firstSubResource;seccondSubResource; thirdSubResource
于 2010-06-22T19:49:22.267 に答える