【发布时间】:2013-05-24 18:57:31
【问题描述】:
我不是特别想解决任何问题,而是我正在学习球衣。
我有一个这样标记的实体类:
@Entity
@Table(name = "myentity")
@XmlRootElement
public class MyEntity implements serializable {
// lots of methods...
}
以及相应的球衣服
@Stateless
@Path("entity")
public class EntityFacade {
@GET
@Path("{param}")
@Produces({"application/xml;charset=UTF-8"})
public List<MyEntity> find(@PathParam("param") String param) {
List entities = entityManager.getResultList(); // retrieve list from db
return entities;
}
}
提供正确的 XML 响应。 假设我想编写一个 MessageBodyWriter 来复制相同的行为,这会产生 XML 响应,我该怎么做?
@Provider
public class TrasformerMessageBodyWriter implements MessageBodyWriter<Object> {
@Override
public long getSize(Object o, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
return 0;
}
@Override
public boolean isWriteable(Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
// return true or false depending if I want to rewrite the response
}
@Override
public void writeTo(Object o, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream) throws IOException,
WebApplicationException {
// what do I need to write here...
}
}
通过使用@Provider 注释进行标记,我可以看到消息正文编写器被正确调用。
当调用 writeTo 时,Object o 是 Vector,Type genericType 是 List,但此时我完全不知道如何在 XML 中转换对象。
最后,如果 jersey 及其注解已经提供了一切,那么 MessageBodyWriter 有什么用处?
我再次重申,这只是一个学术练习。
【问题讨论】:
-
您可能会发现以下帖子作为实现
MessageBodyReader/MessageBodyWriter的示例很有帮助:blog.bdoughan.com/2012/03/…
标签: java jakarta-ee jersey