get - JAX-RS 2 和 Jersey 2 : how to pass an (hash)map on a GET request

标签 get hashmap jax-ws jax-rs

我只是想使用 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 映射,但它用于参数。请问如何传递 map ?

提前致谢!

最佳答案

您需要在您的类路径中包含 Jackson jars(或任何其他 XML/JSON 到 Map 映射器) 出于美观、惯例和安全原因,您可能不想在 @PathParam 上传递 map 。您通常传递一个 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)

@Produces 仅在您还打算返回 XML/JSON 时才需要,但由于您期望 XML 或 JSON,因此使用 @Consumes 是有意义的在这里。

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

附注对于 xml,mime 是 text/xml 而不是 application/xml

关于get - JAX-RS 2 和 Jersey 2 : how to pass an (hash)map on a GET request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17293527/

相关文章:

java - 何时使用 Java SOAP API

javascript - 通过 JS (PhoneGap) 存储来自 GET 请求的数据

php - 奇怪的 $_GET 行为

java - 如何将对象转换为 Map 样式 JSON 以通过 Spring 中的 Get 请求发送?

php - 编辑表单无法在 PHP 中使用 mysql,将数据处理为 href 但不运行测试打印行

java - Json 字符串到 map 的转换,

java - HashMap只存储最后N个元素

java - 将 JSONArray 转换为 HashMap 并匹配

jax-ws - 如何使用 javac 替换 JDK 7 或 6 中已弃用的 wsgen 或 apt?

java - JAXB 或 StAX 消息限制