我想在我的一个项目中使用Atmosphere,并且在使用它来将简单的POJO-s序列化为JSONP时遇到一些问题。我不理解@Produces注释与我之前在一个简单的RESTful服务中序列化我的POJO-s之前成功使用的必要com.sun.jersey.api.json.JSONWithPadding
对象之间的关系。
这是我的暂停方法:
@GET
@Path("/notification")
@Produces( { "application/x-javascript", MediaType.APPLICATION_JSON })
@Suspend
public JSONWithPadding getNextNotification(
@QueryParam("callback") @DefaultValue("callback") String callback) {
Random random = new Random();
Notification n = new Notification();
n.setMessage("Message is " + Long.toHexString(random.nextLong()));
n.setMessage("S-" + Long.toHexString(random.nextLong()));
return new JSONWithPadding(n, callback);
}
这会按预期将适当的JSON字符串返回给我。这就是问题所在。我有广播方法返回:
@Broadcast({XSSHtmlFilter.class, JsonpFilter.class})
@GET
@Path("/broadcast2")
public Notification broadcast2() {
Random random = new Random();
Notification n = new Notification();
n.setMessage("Message is " + Long.toHexString(random.nextLong()));
n.setMessage("S-" + Long.toHexString(random.nextLong()));
return n;
}
这会产生以下异常:
Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class com.ericsson.nss.entities.Notificaion, and Java type class com.ericsson.nss.entities.Notification, and MIME media type application/octet-stream was not fund
似乎框架想要序列化Notification对象但是无法这样做。 JsonpFilter
似乎无所事事。我不确定这个方法是否应该返回Notification或JSONWithPadding
包装对象。如果我从@Broadcast注释中删除过滤器,则挂起方法会发出“com.ericsson.nss.entities.Notification@308be6”字符串。这比异常更好,但仍然不是JSONP消息。不幸的是,从maven repo构建的最新休闲聊天演示没有运行(其他人提到404 / chat)。
如果我的广播方法返回JSONWithPadding
实例并且过滤器关闭,则广播请求获得有效的JSONP响应,但被挂起的线程再次返回com.ericsson.nss.entities.Notification@7f84c9。
您能告诉我如何正确使用过滤器和注释吗?
(我正在使用最新的0.9版Atmosphere)
答案 0 :(得分:0)
我只能通过从我的方法返回String
个实例并使用Jackson手动处理JSONP序列化来实现它。