我必须对其他人编写的 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/