gpt4 book ai didi

java - 找不到媒体类型 MessageBodyReader=application/octet-stream

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:49 25 4
gpt4 key购买 nike

我正在尝试从 http://api.openweathermap.org/data/2.5/forecast/daily?lat=35&lon=139&cnt=10&mode=json 接收 json 数据使用以下代码片段:

private WebTarget getWebTarget() {
Client client = JerseyClientBuilder.newClient();
return client.target("http://api.openweathermap.org/")
.path("data")
.path("2.5");
}

// new one method
Response response = getWebTarget()
.path("daily")
.queryParam("q", String.format("%s,%s", town, countryCode))
.queryParam("cnt", 10)
.queryParam("mode", "json")
.request().accept(MediaType.APPLICATION_JSON_TYPE).get();
WeatherForecast forecast = response.readEntity(WeatherForecast.class);

但最后一行抛出:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/octet-stream, type=class com.app.weather.providers.org.openweathermap.pojo.WeatherForecast, genericType=class com.app.weather.providers.org.openweathermap.pojo.WeatherForecast.

pom.xml 中的 Jersey 依赖项:

<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.4</version>
<!-- use the following artifactId if you don't need servlet 2.x compatibility -->
<!-- artifactId>jersey-container-servlet</artifactId -->
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json</artifactId>
<version>2.0-m05-1</version>
</dependency>

此代码在应用程序服务器之外运行。谢谢。

最佳答案

Jersey JSON 支持作为一组扩展模块提供,其中每个模块都包含一个Feature 的实现,需要将其注册到您的Configurable 实例(客户端/服务器)。有多个框架支持 JSON 处理和/或 JSON-to-Java 绑定(bind)。下面列出的模块通过将各个 JSON 框架集成到 Jersey 中来提供对 JSON 表示的支持。目前Jersey集成了以下模块提供JSON支持:

  • MOXy - 自 Jersey 2.0 以来,通过 MOXy 支持 JSON 绑定(bind)是在 Jersey 应用程序中支持 JSON 绑定(bind)的默认和首选方式。当 JSON MOXy 模块位于类路径上时,Jersey 将自动发现该模块并在您的应用程序中通过 MOXy 无缝启用 JSON 绑定(bind)支持。 (请参阅第 4.3 节“自动发现的功能”。)
  • 用于 JSON 处理的 Java API (JSON-P)
  • jackson
  • 抛弃

有关更多信息,请阅读 chapter 9 Jersey 文件。

Moxy 是建议的 json 媒体支持方法。MOXy 媒体模块是您不需要在客户端/服务器中显式注册它的功能 (MoxyJsonFeature) 的模块之一可配置,因为当您将 jersey-media-moxy 模块添加到类路径时,会自动发现并注册此功能.

要使用 MOXy 作为您的 JSON 提供程序,您需要将 jersey-media-moxy 模块添加到您的 pom.xml 文件中:

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

如果您不使用 Maven,请确保拥有所有需要的依赖项。见jersey-media-moxy dependencies .
您需要将这些 jar 文件添加到您的项目中,以便通过 jersey-media-moxy 支持 json 媒体类型:

  • jersey-media-moxy-2.15.jar
  • org.eclipse.persistence.core-2.5.0-rc2.jar
  • org.eclipse.persistence.antlr-2.5.0.jar
  • org.eclipse.persistence.moxy-2.5.0.jar
  • jersey-entity-filtering-2.3.1.jar

用法:

一些普通类:

public class MyJAXBBean{

private String name = "jack";
private int id = 12;

public MyJAXBBean() {

}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public int getId() {
return this.id;
}

public void setId(int id) {
this.id = id;
}
}

还有一个用于运行 Jersey 客户端示例的主类:

 public static void main(String[] args) {
//ClientConfig cc = new ClientConfig().register(new JacksonFeature());
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8084/myhost/test");

Form form = new Form();
form.param("x", "foo");
form.param("y", "bar");

MyJAXBBean bean;
bean = target.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE),
MyJAXBBean.class);
System.out.println(bean);
}

服务器(http://localhost:8084/myhost/test)的json响应必须是以下格式:

 {"name":"haleh", "id":3}

关于java - 找不到媒体类型 MessageBodyReader=application/octet-stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com