3

JAX-RS 2 を使用して Web サービスの @GET メソッドにマップを渡したいだけです。GET のメソッドに本体がない場合でも、それが可能かどうか、およびその作成方法を知りたいです。

このような :

@GET
@Path(??)
@Produces({"application/xml", "application/json"})
public User find(@PathParam(??) HashMap<String, String> map) {
    // work on map !
}

MultiValued マップが存在することを見てきましたが、それはパラメーター用です。地図を渡す方法を教えてください。

よろしくお願いします!

4

2 に答える 2

3

@PathParamクラスパス (またはその他の XML / JSON to Map マッパー) に Jackson jar が必要です。美的、慣例、およびセキュリティ上の理由から、 にマップを渡したくないでしょう。通常、JSON / XML オブジェクトをリクエスト本文として渡します。たとえば、POST / PUT を使用します。

@POST
@Path("/anypath")
@Consumes({"text/xml", "application/json"})
public User find(HashMap<String, String> map) {
    //magic should happen
}

次に、コンテンツ タイプが application/json または text/xml の POST / PUT リクエストを渡すだけです。

{
  "key1": "value1"
  "key2": "value2"
}

クラスパスに適切な Jackson / Moxy などのマッパーがある場合、JSON / XML 形式からjava.util.Map(または POJO) への変換が行われます。

@ProducesXML / JSON も返す予定の場合にのみ必要ですが、XML または JSON のいずれかを期待しているため、ここで a@Consumesを使用することは理にかなっています。

ただし、たとえばリクエスト パラメータとして GET リクエストで JSON オブジェクトを渡す必要がある場合は、次の質問を参照してください: JSON クエリ パラメータを JAX-RS を使用してオブジェクトに変換する

ps for xml は MIME であり、そうではtext/xmlありませんapplication/xml

于 2013-06-25T14:34:23.873 に答える
0

@Context に慣れましょう。

@GET
public Response superSpecialSearch(@Context UriInfo info, @Context HttpHeaders headers, @Context SecurityContext securityContext) {
    var iAmAMutivalueMap = info.getQueryParameters(true);
    var searchResults = searchForThings( iAmAMultivalueMap ); 
    return Response.ok(searchResults )
}
于 2021-10-14T12:46:56.020 に答える