获取“找不到 Media type=application/json 的 MessageBodyWriter”,尝试通过 JAX-RS Web 服务发送 JSON 对象

2022-09-01 18:03:32

我正在尝试通过 JAX-RS Web 服务发送 JSON 对象。我的文件网站.xml是:

<servlet>
 <description>JAX-RS Tools Generated - Do not modify</description>
 <servlet-name>JAX-RS Servlet</servlet-name>
 <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  <init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>it.notifire</param-value>
  </init-param>
  <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>
<servlet-mapping>
  <servlet-name>JAX-RS Servlet</servlet-name>
  <url-pattern>/jaxrs/*</url-pattern>
</servlet-mapping>

对要发送的对象进行建模的类是:

public class GPSCoordinate {

private float latitudine;
private float longitudine;

 public float getLatitudine() {
    return latitudine;
}
public void setLatitudine(float latitudine) {
     this.latitudine = latitudine;
}
public float getLongitudine() {
    return longitudine;
}
public void setLongitudine(float longitudine) {
    this.longitudine = longitudine;
}
}

根类资源为:

@Path("position")
public class Position {

    @Context
private UriInfo context;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public GPSCoordinate getHTML() {

        GPSCoordinate coord = new GPSCoordinate();
        coord.setLatitudine(90.45f);
        coord.setLongitudine(34.56f);

        return coord;
    }
}

现在,当我尝试访问该服务时,我将浏览器指向以下链接

http://localhost:8080/Notifire/jaxrs/position

我得到以下错误:

message org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter 未找到 media type=application/json

在我的 WEB-INF/lib 文件夹中,我有 jersey JAX-RS 实现的最后一个版本(jaxrs-ri-2.5.jar)和 jersey-json.jar 存档。

任何帮助将不胜感激。


答案 1

尝试将 Genson 添加到类路径中,它将自动启用 JSON 支持。

Genson是用于json和java / scala的数据绑定和流式处理库。它实现了JAX-RS的MessageBodyReader/Writer扩展点,允许球衣自动检测Genson并将其用于Json解析/写入。

您可以找到有关Gensons与JaxRS(球衣和cie)集成的更多信息。


答案 2

泽西岛支持“自动发现”功能,JSON 支持就是其中之一。为了启用它,您需要根据文档将兼容的库添加到您的路径

但是,虽然由于某种原因,推荐的库在我的情况下尚未得到认可,但已:jersey-media-json-processingjersey-media-moxy

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>2.15</version>
</dependency>

2.15是撰写本文时的最新版本。访问 maven 中心工件页面以查找当前版本。