【发布时间】:2015-07-25 19:52:35
【问题描述】:
我正在使用 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 文件包括以下内容以及码头依赖项,
<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 文件中包含了它们,所以我无法弄清楚我缺少什么。
任何帮助将不胜感激。
编辑:添加了码头代码 我的码头代码如下,
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();
}
【问题讨论】:
-
您是否偶然禁用了代码中的自动发现功能?
-
不,但我也没有手动启用它。也许我应该因为我使用的是嵌入式 Jetty...
-
你能出示你的码头代码吗?
-
XML“模型”是否应该与其他调用在同一个包中?目前,GET 请求位于“xx.xx.api.resources”中,XML 位于“xx.xx.api.models”中。我只在启动服务器时调用
jerseyServlet.setInitParameter("jersey.config.server.provider.packages", "xx.xx.api.resource");。这可能是问题吗?我现在试试改。 -
尝试添加一个初始化参数
jersey.config.server.provider.classnames,以org.glassfish.jersey.moxy.json.MoxyJsonFeature为值
标签: java maven jersey jetty moxy