我必须对其他人编写的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返回给客户端?
谢谢,
保
答案 0 :(得分:1)
返回Response而不是实际实体是可以的,因为它转换为的JSON在HTTP响应的两种情况下都是相同的,尽管在第一种情况下它是隐式转换的,而在第二种情况下是手动执行。所以你的片段是正确的,我相信。