JAX-RS 2和Jersey 2:如何在GET请求上传递(哈希)映射

时间:2013-06-25 09:20:03

标签: get hashmap jax-ws jax-rs

我只是想使用JAX-RS 2在我的Web服务上将地图传递给我的@GET方法。我想知道它是否可行以及如何制作它,即使GET的方法没有任何正文。 / p>

像这样:

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

我已经看到它存在MultiValued地图但它是参数。请问如何传递地图?

先谢谢!

1 个答案:

答案 0 :(得分:3)

您需要在类路径中使用Jackson jar(或任何其他XML / JSON到Map映射器) 出于美学,惯例和安全原因,您可能不希望在@PathParam上传递地图。您通常将JSON / XML对象作为请求主体传递,例如使用POST / PUT

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

然后只传递一个POST / PUT请求,内容类型为application / json或text / xml 例如

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

如果你在类路径中有正确的Jackson / Moxy等映射器,它将在你的JSON / XML格式到java.util.Map(甚至是POJO)之间进行转换

只有当你想要返回XML / JSON时才需要@Produces,但由于你需要XML或JSON,所以@Consumes在这里有意义。

但是,如果必须在GET请求上传递JSON对象,例如作为请求参数,请看一下这个问题:Convert JSON query parameters to objects with JAX-RS

P.S。对于xml,mime是text/xml而不是application/xml