我正在实现jersey restful web服务,以从java bean类中获取application / json mime类型。下面给出的是资源类代码
@GET
@Produces({"application/json"})
public synchronized Flights getFlightList() {
return myFlights;
}
这里,如果返回对象(Flight)仅在使用jaxb进行Flight编码时转换为json对象。对于普通的POJO类,它没有返回任何内容,而是Http错误“500”即将发生。
请告诉我是否可以以json格式发送普通的java bean对象?如果是,那么请告诉我如何获得它?
答案 0 :(得分:2)
如果您正在使用servlet,请在web.xml文件中将POJOMappingFeature设置为true,并自动完成POJO转换。
<servlet>
<servlet-name>Jersey</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>my.package.name</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
答案 1 :(得分:1)
您可以查看以下示例以获取指导: http://download.java.net/maven/2/com/sun/jersey/samples/jacksonjsonprovider/1.6/jacksonjsonprovider-1.6-project.zip
另请阅读文档以获取更多知识: http://jersey.java.net/nonav/documentation/latest/json.html#d4e894
答案 2 :(得分:1)
默认注册的JSON序列化提供程序使用与JAXB(它本身处理XML序列化)相同的注释。这通常是一个优点,因为它意味着您只需要输入一组注释,而不必自己编写任何直接序列化代码。
但 可以自己完成更多的序列化工作。
@Produces("application/json")
@Provider
public class FlightsWriter implements MessageBodyWriter<Flights> {
public boolean isWriteable(Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
return type instanceof Flights; // Simplest possible
}
public long getSize(Flights flights,
Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
return -1; // Or real size if you can work it out!
}
public void writeTo(Flights flights,
Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String,Object> httpHeaders,
OutputStream entityStream) throws IOException,
WebApplicationException {
// Put your code to write the JSON here...
}
}
请注意,这是很多工作,这就是大多数人使用内置引擎并添加JAXB注释的原因。