我只是想使用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地图但它是参数。请问如何传递地图?
先谢谢!
答案 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