gpt4 book ai didi

java - Jersey REST - 将 MultivaluedMap 发送到 GET 会导致不支持的媒体类型

转载 作者:可可西里 更新时间:2023-11-01 16:11:34 24 4
gpt4 key购买 nike

我正在尝试进行参数化获取(也称为搜索)。我不确定为什么这不起作用。我们使用最新的 jersey 依赖项 (1.14),到目前为止所有 REST 接口(interface)都工作得很好。简单的休息:

@Path("/some/path")
@Component
public class SomeRest {

@GET
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces({ MediaType.APPLICATION_JSON })
public Response getAll(MultivaluedMap<String, String> queryParams) {

// extract params, do search, return response as JSON
// (Using ObjectMapper.writeValue() to convert object to JSON String)

}
}

我认为该方法的工作原理并不重要,因为错误清楚地表明由于某些不受支持的媒体类型(当我在浏览器中输入我的路径时),它无法首先输入它:

HTTP Status 415 - Unsupported Media Type

输出是:

SEVERE: A message body reader for Java class javax.ws.rs.core.MultivaluedMap, and Java type javax.ws.rs.core.MultivaluedMap<java.lang.String, java.lang.String>, and MIME media type application/octet-stream was not found.
The registered message body readers compatible with the MIME media type are:
....

有人有想法吗?谢谢!

编辑:

我的目标是通过使用带有 GET 资源的查询参数来实现搜索。因此,当我调用 /some/path 时,我会得到所有结果,但如果我调用 some/path?limit=10&offset=10,我会得到第二组 10 个结果。我可以使用查询参数解决该特定问题,但我也希望能够在同一参数映射中定义 where 子句参数,如 name=foo。这些参数应该是动态的,因为我想创建一个通用的 getAll 方法,它可以在 GET 调用中获取任何参数映射。

所以我猜想的问题是:如何实现动态查询参数?

最佳答案

我认为您混淆了实际 url 中的查询参数:

someurl/resource?param1=value1&param2=value2

form url 编码信息格式相同,但参数在正文中。由于 GET 请求不带正文,您要么意味着您想要执行 POST,要么您想要使用查询参数而不是 x-www-form-urlencoded。

祝你好运!

编辑:

如果您确切知道传入的参数是什么,则可以使用@QueryParam;如果您不确定 URL 中预期有多少/哪些查询参数,则可以使用@Context UriInfo。

关于java - Jersey REST - 将 MultivaluedMap 发送到 GET 会导致不支持的媒体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12513754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com