3

私は3つのタイプのREST URLに対応するために取り組んでいます:

  1. url/detail/3 (整数のみ)
  2. url/detail/hello (文字列のみ)
  3. url/detail/3/1d

私が使用している URL 1 と 3 にはmethod1、URL 2method2が使用されています。

問題 1: 1 と 2 のすべてのリクエスト タイプは方法 2 のみに一致します。特に整数を持つクエリの方法 1 で整数パターンを指定しましたが。

問題 2:オプションのパラメーターを使用するには (3 のように) jersey はオプションのパラメーターのオプションを提供しないためurl/detail/3/1d 、メソッド 1 を使用しています。

私はジャージの初心者なので、私が間違っていることを理解するのを手伝ってください.

@GET
@Path("/detail/{id: \\d+}/{time-period:(/time-period/[^/]+?)?}")

@Produces({ MediaType.APPLICATION_JSON })
@Consumes(MediaType.APPLICATION_JSON)
public JResponse method1(
        @Context HttpHeaders headers,
        @PathParam("id") String id,
        @PathParam("time-period") String timePeriod) {
    if(timePeriod == null || timePeriod.equals(""))
    {
        //code
    }
    else
      //code
}
@GET
@Path("/detail/{name}")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes(MediaType.APPLICATION_JSON)
public JResponse method2(
        @Context HttpHeaders headers, @PathParam("name") String name) {
    //code
}
4

3 に答える 3

1

空白の欠落が問題につながる可能性があります。Jax-RS のオプションの @PathParam を参照してください

パラメータのデフォルト値を定義するには、@DefaultValue("1000")

于 2013-09-17T13:46:25.413 に答える
0

複雑な正規表現の代わりに、おそらく subresource を使用する必要があります

于 2013-09-17T14:15:59.040 に答える
0

@Path("detail/{id}{time-perioid:(/[^/]+?)?}")

http://xyz:4080/analytics/internal/detail/kala

2014-01-17 07:35:50,509 [http-nio-4080-exec-8] INFO xxx - id: カラ

2014-01-17 07:35:50,510 [http-nio-4080-exec-8] INFO xxx - 期間:

http://xyz:4080/analytics/internal/detail/kala/123

2014-01-17 07:36:01,644 [http-nio-4080-exec-9] INFO xxx - id: カラ

2014-01-17 07:36:01,645 [http-nio-4080-exec-9] INFO xxx - 期間: /123

id が文字列または整数の場合、ハンドラー内で検証します。

于 2014-01-17T07:44:40.643 に答える