问题标签 [jax-rs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
http - URL 矩阵参数与查询参数
我想知道是否在我的 URL 中使用矩阵或查询参数。我发现对该主题的较早讨论并不令人满意。
例子
- 带有查询参数的 URL:http://some.where/thing?paramA=1¶mB=6542
- 带有矩阵参数的 URL:http://some.where/thing;paramA=1;paramB=6542
乍一看,矩阵参数似乎只有优点:
- 更具可读性
- 不需要对 XML 文档中的“&”进行编码和解码
- 带有“?”的网址 很多情况下没有缓存;带有矩阵参数的 URL 被缓存
- 矩阵参数可以出现在路径中的任何地方,并且不限于它的末尾
- 矩阵参数可以有多个值:
paramA=val1,val2
但也有缺点:
- 只有像JAX-RS这样的少数框架支持矩阵参数
- 当浏览器通过 GET 提交表单时,参数变为查询参数。因此,对于同一任务,它最终会得到两种参数。为了不混淆 REST 服务的用户并限制服务开发人员的工作量,在这方面使用始终查询参数会更容易。
由于服务的开发者可以选择支持矩阵参数的框架,剩下的唯一缺点就是浏览器会默认创建查询参数。
还有其他缺点吗?你会怎么办?
java - 用于 RESTful GUI 应用程序的最先进的 Java Web 框架?
是的,我知道,最好的 web 框架的老问题......但让我解释一下。
我正在寻找基于 Java Servlet 的 Web 框架,它允许 RESTful 交互并且也适合构建 Web GUI。
我想要的是:
- REST 支持与 http 内容协商和良好的 URL 映射
- 从请求参数到域对象的数据转换(理想情况下也是另一个方向)
- 无需复制域对象作为 Web 的接口(如在 struts 中)
- 简单的 EJB 集成
- 依赖注入应该由 Java EE 服务器执行
- 可理解的代码(我不喜欢 Spring MVC 在类路径中对组件的魔术布线)
- 易于配置(在 Spring 中没有神奇地配置的东西在容器中配置很乏味 - 我有时更喜欢直接依赖)
- 轮子不应该被重新发明,例如应该使用 JPA 和 BeanValidation 之类的东西,而不是被框架重新发明,或者至少这些标准应该易于使用。
- 在表单中显示错误的验证支持
- 支持国际化
候选人:
Spring MVC很强大,但是我厌倦了 Spring 的配置,不喜欢这种编程模型。我认为它有点过于抽象和灵活,因此需要很多配置。而且我不喜欢 Spring MVC 使用注解的方式。但是也有一些设计缺陷,比如
return
通过输出参数返回值的方法——真的很丑!我认为将 Spring MVC 与 Java EE 依赖注入一起使用并不容易,因为 Spring MVC 严重依赖 Spring DI。Roo看起来很酷,但它只是创建 Spring MVC 应用程序的另一种方式,它使用 AOP 做了一些奇怪的事情。
Struts有点笨拙和过时。
条纹ActionBean 方法看起来并不比 Struts 好多少。我不喜欢它。
- Grails不错,但有问题(至少在 1.2 之前)。Reeinvents the wheel:例如,我更喜欢 JPA 而不是 Gorm。
我不是在服务器上寻找具有 UI 状态的框架,如 Wicket、Tapestry 或 JSF。我认为这种方法与网络的基本原则相矛盾!
那么该怎么办?从头开始编写框架?唔 ...
我想要像JAX-RS 这样支持经典浏览器 GUI 的东西。例如,框架应该支持验证并将验证错误放入重新显示的表单中。有没有类似的东西?有什么建议吗?
java - JAX-RS 是否需要数据传输对象 (DTO)?
如果 JAX-RS 应用程序的方法将返回域对象,则表示(例如 JSON)将包含该对象的所有属性 - 对吗?但是如果这个对象包含不应该暴露给网络的“私人”数据呢?
从外到内的另一个方向是什么:如何防止私有字段被覆盖?
唯一的解决方案似乎是创建数据传输对象 (dto)。
除非无法指定要映射的字段,否则使用“自动映射器”不是解决方案。
那么,强制 JAX-RS 开发人员创建 DTO 吗?还是有其他解决方案?
java - JAX-RS 1.1 的最低 Servlet API 版本
运行 JAX-RS 1.1(例如 Jersey 1.1)需要什么最低版本的 Servlet API?
java - 如何部署 JAX-RS 应用程序?
JAX-RS 1.1 规范在第 6 页上说:
如果不存在 Application 子类,则添加的 servlet 必须命名为:
添加的 servlet 是什么?它可能是一个任意的 servlet 吗?
如果存在 Application 子类并且已经定义了一个具有 servlet 初始化参数的 servlet,名为:
同样,这里的“servlet”是什么?
如果存在未被现有 servlet 处理的 Application 子类,则 ContainerInitializer 添加的 servlet 必须使用 Application 子类的完全限定名称命名。
“ContainerInitializer添加的servlet”是否意味着servlet是自动添加的?配置会是什么样子?
目前我既不使用 Application 类也不使用 web.xml 并且它可以工作(使用 GlassFish 3.1)。这种部署机制是否需要完整的类路径扫描,而大型库可能会很慢?
如何部署在 Servlet 容器上?
网络上有许多令人困惑的配置选项。在 web.xml 中使用上下文参数查看此示例(对我不起作用!)。部署 JAX-RS 应用程序的首选方法是什么?
web-services - 如何从 JAX-RS Web 服务返回多部分内容?
我想避免在从我的 JAX-RS Web 服务返回的 XML 中嵌入 HTML,但仍然能够在对单个 GET 的响应中返回 XML 和 HTML。
有没有办法做到这一点?这是个坏主意吗?
现在我正在为不同的资源做 2 个单独的 GET,一个 XML 一个 HTML - 但是由于这两种资源总是一起检索,这似乎很浪费而且容易出错。
java - JAX-RS 适合作为 MVC 框架吗?
JAX-RS 有一些 MVC 支持,但我想知道 JAX-RS 是否真的是构建供人类使用的 Web 应用程序的好选择。
如果用户在表单中输入错误或不完整的信息,它应该像 Grails 或 Wicket 一样再次显示。使用 JAX-RS 有没有一种舒适的方法来做到这一点?
据我所知,如果没有给出所有必需的参数或存在类型转换问题(例如 Date),URI 映射无法正常工作。那是对的吗?
是否支持国际化模板?
这是一个简单的基于 JAX-RS 的 GUI 应用程序的示例。但这真的很简单,没有讨论 i18n 和验证之类的东西。
json - 如何自定义将 JAXB 对象列表序列化为 JSON?
我正在使用 Jersey 为服务器组件创建 REST Web 服务。
我想在列表中序列化的 JAXB 注释对象如下所示:
我有一个 REST 资源来检索一个如下所示的分布:
我还有一个 REST 资源来检索所有发行版的列表,如下所示:
我使用 ContextResolver 来自定义 JAXB 序列化,目前配置如下:
REST 资源和上下文解析器都可以工作。这是第一个输出的示例:
这正是我想要的。这是列表的输出示例:
这不是我想要的。
我不明白为什么那里有一个封闭distribution
标签。我想.rootUnwrapping(true)
在上下文解析器中删除它,但显然这只删除了另一个封闭标签。这是输出.rootUnwrapping(false)
:
我还必须配置.arrays("distribution")
为始终获取 JSON 数组,即使只有一个元素。
理想情况下,我希望将其作为输出:
我试图返回 a List<XMLDistribution>
, a XMLDistributionList
(列表的包装器), a XMLDistribution[]
,但我找不到以我所需格式获取简单 JSON 分布数组的方法。
我还尝试了由JSONConfiguration.natural()
,JSONConfiguration.mappedJettison()
等返回的其他符号,但没有得到任何类似于我需要的东西。
有谁知道是否可以配置 JAXB 来执行此操作?
java - 关于使用 CXF、JAX-RS 网络服务的请求和会话的问题
我有一个使用 CXF、JAX-RS 和 Spring 设置的网络服务。我有以下方法:
如何访问我的HttpRequest
对象makePayload()
?
对此方法的调用是否会生成一个会话,如果是,我可以获取它的句柄,并且该会话对于来自同一客户端的所有后续请求是否是持久的?