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

时间:2014-10-07 10:29:17

标签: 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。

我应该补充的一点是涉及休息的框架。我想这就是做JSON转换的pojo。

我需要检查一个cookie,如果找到它就采取某种行动。如果请求没有,我也想要返回一个cookie。读取cookie似乎很容易 - 只需将其添加到方法签名中:

@CookieParam("mycookiekey") String mycookieValue

我的困惑是我在网上看到的示例显示返回响应的方法,但是这个返回了一个pojo - 那么如何将cookie放入响应?我以为我可以做response.addCookie(...)[其中响应是传递给方法的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返回给客户端?

谢谢,

1 个答案:

答案 0 :(得分:1)

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