小编Mar*_*eim的帖子

为什么 RESTEasy 会忽略 POST 方法的 HTTP 302 状态代码?

我对 JAX-RS 和 RESTEasy 很陌生,有一件事我真的不明白。首先我来描述一下我们做了什么:

  • 我们使用 JBoss AS 7.2(是的,就是那个旧版本)和 RESTEasy 2.3.5 进行机器对机器通信。
  • 我们编写了一项接受 POST 消息但不返回正文的服务。使用通过 void 方法映射到 Java 接口的 JAX-RS 注释。
  • 该服务应仅允许安全 (HTTPS) 通信,不允许 HTTP。为了防止意外使用 HTTP,我们将Transport-guarantee设置为CONFIDENTIAL。因此,每个 HTTP 请求都会导致带有状态代码 302 和 HTTPS 位置的响应。
  • 现在有人不小心配置了 HTTP URL 而不是 HTTPS。服务器回复了 302 状态代码和正确的位置。不幸的是,客户端既没有遵循重定向也没有引发异常。因此,它没有表明呼叫未接通

关于HTTP 状态代码的RFC,我理解 POST 方法不应该有自动重定向。我本以为会引发异常。相反,这个问题会被忽略,让客户端应用程序根本没有机会检测到它刚刚发出的调用没有到达它应该到达的地方。为什么会出现这种情况以及我该如何正确执行此操作

我不相信像 RESTEasy 这样的库不允许正确处理这种情况,所以我确信我使用它是错误的。不幸的是,即使经过几个小时的谷歌搜索,我仍然没有找到我的问题的答案。我希望这里有人能启发我。

为了重现该问题并允许与其他 JAX-RS 实现进行比较,我将一个小型演示应用程序上传到了Github。它只需要 Maven 和 JDK 8 即可运行。

先感谢您,

马丁

post jax-rs resteasy http-status-code-302

6
推荐指数
0
解决办法
944
查看次数

使用较旧版本的实体类实现复杂JPA实体的部分更新

我有一个概念性的问题,我希望有人可能有答案.

我有什么?

我有一个RESTful服务,它为单一类型的实体提供类似CRUD的操作.实体(让我们称之为命令)使用Jackson表示为JSON.Jackson注释直接附加到实体类,没有明确的数据传输层.实体类包含许多属性,一对一和一对多关系.

从技术上讲,它基于Wildfly 10,JAX-RS 2.0和JPA 2.1(使用Hibernate 5).

目前支持的操作是:

  • GET 通过使用orders/123 读取实体EntityManager.find
  • PUT 使用或orders/123 创建替换实体EntityManager.persistEntityManager.merge

代码示例

该实体的简化版本如下所示:

@Entity
@Table(name = "order")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_EMPTY)
public class Order {

    @Id
    @SequenceGenerator(name = "order_id", sequenceName = "order_id_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="order_id")
    @Column(name = "id")
    private long id;

    @Version
    private long version;

    @Column(name = "correlation_id", unique = true)
    private long correlationId;

    @OneToOne(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JsonManagedReference
    private …
Run Code Online (Sandbox Code Playgroud)

rest jpa jax-rs forward-compatibility

6
推荐指数
0
解决办法
201
查看次数