【问题标题】:How to map URLs to different methods based on the presence of query parameters (JAXB)如何根据查询参数 (JAXB) 的存在将 URL 映射到不同的方法
【发布时间】:2012-03-16 04:19:11
【问题描述】:

我正在使用 JAXB/Jersey 编写 ReST 服务。我想做不同的服务器端处理,并根据 URL 是否有查询参数返回不同的响应。示例:

http://domain.com/Person

将映射到记录可用“个人”服务的页面,而

http://domain.com/Person?search="someName"

将返回查找人员的结果。

我目前有一个约定,用户可以通过请求基本 URL(即http://domain.com/Personhttp://domain.com/Facility)来获取每个服务类别的使用/文档。此外,文档以 XML、JSON、HTML 或纯文本形式返回,具体取决于 Content-Type 标头。

问题 1: 这对 ReST 服务来说是一个好的设计吗?
问题 2: 如何根据 URL 是否具有将 URL 映射到不同的响应查询参数?

【问题讨论】:

  • 我不相信你可以通过注释使用 Jersey 来做到这一点,但你可以通过 @RequestMapping 使用 SpringMVC 3.0
  • @Trever 谢谢;这是相关文档:Spring 3 @RequestMapping

标签: java rest jaxb jersey


【解决方案1】:
  1. 我不认为这是一个好的设计。假设 URL 指向一个资源,我认为资源不应该仅因查询参数而异。您可以使用不同的内容类型或附加 url。例如。 http://domain.com/Personhttp://domain.com/Person/search

  2. 没有。 JAX-RS 不允许这种区分。区别基于 url 本身(没有查询字符串)和生产/消费内容类型。

【讨论】:

  • 感谢您的回复。我原来有'/Person/search',但是老板想看看我们能不能做查询的东西。
【解决方案2】:

作为替代方案,我会考虑:

http://domain.com/service/People - 服务描述

http://domain.com/People - 列出所有人

http://domain.com/People?search=someName - 根据搜索条件列出所有人员

http://domain.com/People/1234 - 列出特定的人

从逻辑上讲,现在呈现的资源更加一致。这意味着,如果您的搜索可能返回多个人,则 /People 处的资源仍然是人员列表。

/People 表示的资源不是服务描述,而是实际的人。因此,为什么我会将其拉入不同的 URL。

【讨论】:

  • 伟大的想法。非常 RESTful 的设计。谢谢。
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多