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 到 Map 映射器)中有 Jackson 罐子,出于美学、约定和安全原因,您可能不想在. 您通常将 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 等映射器,它将java.util.Map为您完成 JSON / XML 格式到(甚至是 POJO)之间的转换

仅当@Produces您还打算返回 XML / JSON 时才需要,但由于您期望 XML 或 JSON,那么@Consumes这里有一个有意义的。

但是,如果您必须在 GET 请求中传递 JSON 对象,例如作为请求参数,请查看以下问题:Convert JSON query parameters to objects with 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 回答