首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过带有特定MessgeBodyReaders/Writers的特定资源实例初始化Jersey?

如何通过带有特定MessgeBodyReaders/Writers的特定资源实例初始化Jersey?
EN

Stack Overflow用户
提问于 2009-05-26 00:50:35
回答 1查看 4.3K关注 0票数 1

我正在尝试使用预配置的资源实例在预配置的端口/url上启动Jersey。我不太明白如何正确地做这件事。

下面是一段代码。帮帮我,请填空:

代码语言:javascript
复制
@Component
@PerRequest
@Path("/svc")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public class MyService
{
    // This piece is known
}

public class JSONMessageBodyWriter implements MessageBodyWriter<Object>
{
    // This piece is known
}

public class XMLMessageBodyWriter implements MessageBodyWriter<Object>
{
    // This piece is known
}

// This is where I need help
MyService service = new MyService();
...
HttpHandler handler = ???
...
HttpServer server = ???
server.createContext("/services", handler);
...
server.start();

在上面的代码片段中,我试图通过http://localhost:8080/services/svc url公开MyService。如果要插入JSONMessageBodyWriter和XMLMessageBodyWriter -服务将相应地在XML和JSON中工作。

如果你知道如何在Jetty或Grizzly上做到这一点,也让我知道。Spring能帮上忙吗?

EN

回答 1

Stack Overflow用户

发布于 2009-06-12 02:13:37

Jersey本身提供了一整套examples,特别是最简单的helloworld示例,展示了如何在端口上启动服务器,以便在JUnits中运行或测试。如果您查看该示例,您将获得有关如何设置和启动服务器的示例。

现在,在将MessageBodyReaders和MessageBodyWriters配置为jersey应用程序的一部分时,您会发现这是JAX-RS规范本身( jersey实现的)所涵盖的。首先,您的阅读器和编写器需要@Provider注释。此外,阅读器应该获得@Consumes注解,编写器应该获得@Produces注解,这样您就可以分别指定它们使用和产生的mime类型。

下一步是激活它们。上面的helloworld示例不会显示这一点,因为它没有使用自定义的读取器或写入器(另一个示例可能是,我没有查看)。因此,您将编写Application的子类,在其中指定您的资源类和读取器/写入器类,而不是提供用于查找资源的包(正如它们所做的那样;当您看到helloworld示例时,您将知道我所说的是什么)。对于读取器和写入器,您可以选择指定一个类(从getClasses返回),或者自己提供一个已经创建的实例(从getSingletons返回)。

最后,指定Application子类的名称作为初始化参数"javax.ws.rs.Application"的值。启动服务器时,可以将init-params传递给GrizzlyWebContainerFactory.create (同样,您将看到示例中使用了该参数)。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/908495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档