gpt4 book ai didi

java - 找不到媒体类型 MessageBodyWriter=application/json

转载 作者:行者123 更新时间:2023-11-30 11:00:12 25 4
gpt4 key购买 nike

我正在使用 Jetty 制作一个小型 RESTful 服务。使用 Maven 作为构建工具。

当我尝试调用试图访问对象的 JSON 表示的 GET 方法时,我收到“MessageBodyWriter”错误。有问题的方法如下,

@Path("/gtfs-rt-feed")
public class GtfsRtFeed {

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getGtfsRtFeed(){

GtfsRtFeedModel feedInfo = new GtfsRtFeedModel();
feedInfo.setStartTime(121334);
feedInfo.setGtfsId(1);
feedInfo.setGtfsUrl("http://www.google.com");
Gson gson = new Gson();

return Response.ok(feedInfo).build();
}
...

GtfsRtFeedModel的GtfsRtFeedModel如下,

@XmlRootElement
public class GtfsRtFeedModel {
private String gtfsUrl;
private int gtfsId;
private long startTime;

public GtfsRtFeedModel(){}

public String getGtfsUrl() {
return gtfsUrl;
}
...//Getters and setters for all private variables below

我的 Maven 文件包括以下内容以及 jetty 依赖项,

    <dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.19</version>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.19</version>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.19</version>
</dependency>

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

大多数类似的问题似乎已通过添加 jersey-media-moxy 和所需的依赖项得到解决。但是因为我已经在我的 maven 文件中有了它们,所以我不知道我遗漏了什么。

如有任何帮助,我们将不胜感激。

编辑:添加 jetty 代码我的Jetty代码如下,

public static void main(String[] args) throws Exception{
GTFSDB.InitializeDB();
Datasource ds = Datasource.getInstance();
ds.getConnection();

Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.setResourceBase(BASE_RESOURCE);

server.setHandler(context);

context.addServlet(RTFeedValidatorServlet.class, "/validate");
context.addServlet(GTFSDownloaderServlet.class, "/downloadgtfs");
context.addServlet(FeedInfoServlet.class, "/feedInfo");
context.addServlet(TriggerBackgroundServlet.class, "/startBackground");
context.addServlet(GetFeedJSON.class, "/getFeed");

context.addServlet(DefaultServlet.class, "/");

ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/api/*");
jerseyServlet.setInitOrder(1);
jerseyServlet.setInitParameter("jersey.config.server.provider.packages", "edu.usf.cutr.gtfsrtvalidator.api.resource");


server.start();
server.join();
}

最佳答案

通常是 auto-discoverable feature注册MoxyJsonFeature .我不确定它是如何与嵌入式 Jetty 一起工作的。但是如果没有注册,我们可以自己注册。有一个 <init-param>这允许我们添加任意数量的提供者,以逗号分隔。在 web.xml 中它将是

<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
org.glassfish.jersey.moxy.json.MoxyJsonFeature,
org.bar.otherresources.MyCatResource
</param-value>
</init-param>

所以在您的 Jetty 代码中,您可以这样做

jerseyServlet.setInitParameter("jersey.config.server.provider.classnames",
"org.glassfish.jersey.moxy.json.MoxyJsonFeature");

MoxyJsonFeature注册MessageBodyWriterMessageBodyReader需要将我们的 POJOS 编码到 JSON 或从 JSON 中解码。查看更多信息 JAX-RS Entity Providers ,并继续 Support for Common Media Type Representations

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

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