Я хотел бы использовать Atmosphere в одном из моих проектов, и у меня возникли проблемы с его использованием для возврата простых POJO-объектов, сериализованных в JSONP.Я не понимаю связи между аннотацией @Produces и необходимым com.sun.jersey.api.json.JSONWithPadding
объектом, который я успешно использовал перед сериализацией моих POJO в простой RESTful-службе.
Вот мой метод приостановки:
@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, как и ожидалось.И тут возникает проблема.У меня есть метод Broadcaster, который возвращает:
@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
Кажется, что фреймворк хотел бы сериализовать объект уведомления, но не может это сделать,JsonpFilter
кажется бездействующим.Я не уверен, должен ли этот метод возвращать Notification или объект обтекания JSONWithPadding
.Если я удалю фильтры из аннотации @Broadcast, то метод приостановки выдаст строку «com.ericsson.nss.entities.Notification@308be6».Это лучше, чем исключение, но все же не сообщение JSONP.К сожалению, последняя демонстрация rest-chat, построенная из репозитория maven, не работает (404 on / chat, как упоминалось другими).
Если мой метод широковещания возвращает экземпляр JSONWithPadding
и фильтры отключены, то запрос широковещанияполучает действительный ответ JSONP, но приостановленный поток снова возвращает com.ericsson.nss.entities.Notification@7f84c9.
Можете ли вы сказать мне, как правильно использовать фильтры и аннотации?
(яиспользуя последнюю версию Атмосферы 0.9)