我可以在RESTful-jersey中获得普通的pojo作为json对象

时间:2010-10-28 07:37:46

标签: jersey

我正在实现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对象?如果是,那么请告诉我如何获得它?

3 个答案:

答案 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)

答案 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注释的原因。