gpt4 book ai didi

java - 如何使用具有特定 MessageBodyReader/Writers 的特定资源实例初始化 Jersey?

转载 作者:行者123 更新时间:2023-11-30 05:16:30 34 4
gpt4 key购买 nike

我正在尝试使用预配置的资源实例在预配置的端口/url 上启动 Jersey。我不太清楚如何正确地做到这一点。

这是一段代码。请帮我填空:

@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 公开 MyService网址。如果插入 JSONMessageBodyWriter 和 XMLMessageBodyWriter - 该服务将相应地使用 XML 和 JSON。

如果您知道如何在 Jetty 或 Grizzly 上执行此操作,也请告诉我。 Spring 可以提供帮助吗?

最佳答案

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

现在,在将 MessageBodyReaders 和 MessageBodyWriters 配置为 jersey 应用程序的一部分时,您会发现 JAX-RS 规范本身(jersey 实现)涵盖了这一点。首先,您的读者和作者需要 @Provider 注释。此外,读取器应该获取 @Consumes 注释,写入器应该获取 @Produces 注释,这样您就可以分别指定它们消费和生成的 mime 类型。

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

最后,将应用程序子类的名称指定为 init 参数 “javax.ws.rs.Application” 的值。当您启动服务器时,可以将 init-params 传递给 GrizzlyWebContainerFactory.create (同样,您将在示例中看到它)。

希望这有帮助。

关于java - 如何使用具有特定 MessageBodyReader/Writers 的特定资源实例初始化 Jersey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/908495/

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