java - 如何从启用 jax-rs/rest-easy 的返回 pojo 的方法返回 cookie

标签 java jax-rs resteasy

我必须对其他人编写的 javax-rs Web 应用程序进行更改。我习惯了冗长的方式做事,而 javax-rs 对我来说是新的。该函数目前如下所示:

@POST
@Path("mypath1/mypath2")
@Consumes("application/json")
@Produces("application/json")
public A myMethod(B myB, @Context final HttpServletResponse response)
{
    A myA = new A();
    ...
    return myA;
}

A 只是一个 pojo,但我猜它会在这个过程中的某个时刻转换为 JSON。

我要补充的一件事是涉及到rest-easy框架。我猜这就是 pojo 到 JSON 转换的原因。

我需要检查 cookie 并在找到时采取特定操作。如果请求没有 cookie,我还想返回 cookie。读取 cookie 似乎很容易 - 只需将其添加到方法签名中即可:

@CookieParam("mycookiekey") String mycookieValue

我的困惑是,我在网络上看到的示例显示返回响应的方法,但这个返回一个 pojo - 那么我如何将 cookie 获取到响应中?我以为我可以像我正常的冗长方式那样执行response.addCookie(...) [其中response是传递给该方法的HttpServletResponse],但我也在网上看到在javax-rs中返回cookie的方式有点不同,所以我想我也许应该做这样的事情:

NewCookie newCookie = new NewCookie("mycookiekey", "mycookieValue");
ResponseBuilder builder = Response.ok(myA, MediaType.APPLICATION_JSON);
Response r = builder.cookie(newCookie).build();
return r;

但那是返回一个 Response,并且无论调用该方法,显然都期望返回 A 类型的对象。

所以我想我的问题是,我仍然可以从方法返回类型 A 的对象,并将 cookie 返回给客户端吗?

谢谢

保罗

最佳答案

返回 Response 而不是实际实体是可以的,因为在两种情况下,它转换为的 JSON 在 HTTP 响应中都是相同的,尽管在第一种情况下它是隐式转换的,而在第二种情况下是手动转换的。所以我相信你的代码片段是正确的。

关于java - 如何从启用 jax-rs/rest-easy 的返回 pojo 的方法返回 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26233948/

相关文章:

java - Gradle 依赖项不包含在 jar 中

java - Spring Web Reactive 不能作为部署在 Tomcat 8.5 上的 war 文件工作

java - org.json.JSONException : JSONObject ["ListeCar"] not found

java - 在变量值之后命名 json 属性

Android 应用程序的 Java 后端建议

rest - 从 EJB 模块将 EJB 公开为 JAX-RS

java - 为什么缺少媒体类型 application/json 的编写器

java - 有没有办法在文本 block 中查找位置名称

java - 具有 HTTP 状态 500 而不是 HTTP 状态 400 的 JAX-RS 响应

java - JAX-RS 安全性 - 主体不持久