如何使用泽西岛 JSON POJO 支持?

2022-09-01 03:08:20

我有一个对象,我想在JSON中作为RESTful资源提供。我打开了泽西岛的JSON POJO支持,如下所示(在web.xml中):

<servlet>  
    <servlet-name>Jersey Web Application</servlet-name>  
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>  
</servlet>  

但是当我尝试访问资源时,我得到这个异常:

SEVERE: A message body writer for Java type, class com.example.MyDto, and MIME media type, application/json, was not found
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException
...

我试图服务的类并不复杂,它所拥有的只是一些公共的最终字段和一个设置所有这些字段的构造函数。这些字段都是字符串,基元,与此类类似的类或其列表(我尝试使用普通列表而不是通用List<T>s,无济于事)。有谁知道什么给予?谢谢!

Java EE 6

球衣 1.1.5

玻璃鱼 3.0.1


答案 1

如果要使用 JAXB 注释,则可以使用(请参阅其他答案)。@XmlRootElement

但是,如果您更喜欢纯POJO映射,则必须执行以下操作(不幸的是,它不是在文档中编写的):

  1. 将 jackson*.jar 添加到你的类路径中(如 @Vitali Bichov 所述);
  2. 在 web.xml中,如果您使用的是 init 参数,请添加到列表中。这将在泽西岛的扫描列表中包括 JSON 提供程序。com.sun.jersey.config.property.packagesorg.codehaus.jackson.jaxrs

答案 2

这为我做到了 - 泽西岛 2.3.1

在网络中.xml文件:

<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value><my webapp packages>;org.codehaus.jackson.jaxrs</param-value>
</init-param>
</servlet>

在 pom.xml 文件中:

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.3.1</version>
</dependency>