Jersey RestとPathParam正規表現
-
26-12-2019 - |
質問
私はJerseyを使ってREST Webサービスを開発しようとしています。私の要件は、渡されたPatParamパラメータに基づいて、Webサービスと返信データにアクセスできることです。これまでのところ私のWebサービスは次のとおりです。
@GET
@Produces(MediaType.APPLICATION_JSON)
@Consumes({ "application/xml", "application/json", "application/x-www-form-urlencoded" })
@Path("/1.0/people{extension:(.json)*}/{personId:([^/]+?)?}{entityExtension:(.json)*}")
public String getLocation(@PathParam("extension") String extension, @PathParam("personId") String personId,@PathParam("entityExtension") String entityExtension)
{
if ((personId==null ||personId.equals("")) && (extension == null || extension.equals("")))
return "No Id, and no extension";
else
return "personId= "+personId + ", extension= " + extension+", entityExtension= "+entityExtension;
}
.
上記のコードを念頭に置いて、私が達成しようとしているものは次のとおりです。
http://localhost:8080/Jersey/RestService/1.0/people.json
.
"JSON"フォーマット(したがって.json拡張子)のすべての人のリストを返すべきです
今、私は単に人のIDを入れることによって特定の人の情報を得ることができ、拡張子に基づいてJSON / XMLでその人の情報を返すことができます:
http://localhost:8080/Jersey/RestService/1.0/people/Mouhammed89.json
.
上記のURLでは、PersonID:Mouhammed89の情報を返品し、JSON形式で情報を返品してください。
私の問題は私が使用している正規表現と共にあることを知っているので、私は彼らを作成するのに役立つことに本当に感謝します。
解決
IMHOコンテナ(List
)と項目(Person
)URL
は別々に処理する必要があります。
.json
応答を返すために明示的なJSON
プレフィックスを必要としないため、API
レベルでの注釈のみが十分です。
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/1.0/people") //no need for .json suffix as API only return JSON format
public List<String> allLocations(..){ //jackson etc. will convert return type to json string
..
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/1.0/people/{personId: \\d+}")//digits only
public String getLocation(..){ //jackson etc. will convert return type to json string
..
}
. 所属していません StackOverflow