gpt4 book ai didi

java - Jersey 没有看到我的 MessageBodyReader

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:05 27 4
gpt4 key购买 nike

我正在尝试将 Jersey 与我自己的 json MessageBodyReader/MessageBodyWriter 一起使用(因为我没有在我的域类上使用 @XmlRootElement... 注释)。

@Provider
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public final class MyGsonMessageBodyHandler implements MessageBodyWriter<Object>, MessageBodyReader<Object> {
...
}

Jersey 使用此类作为 messagebodywriter(因为它在实现的方法 writeTo 中的断点处停止)。但是它没有将此类视为 messagebodyreader(即使我将此类分解为 messagebodyreader/messagebodywriter 的单独实现,它仍然拒绝使用我的 messagebodyreader)。

测试代码如下(jersey-grizzly):

final Greeting greeting = resource.path("/greeting")
.queryParam("name", name)
.accept(MediaType.APPLICATION_JSON)
.type(MediaType.APPLICATION_JSON)
.get(Greeting.class);

我得到的错误如下所示:

A message body reader for Java class test.Greeting, and Java type class test.Greeting, and MIME media type application/json was not found

我想知道编写自己的 MessageBodyReader 需要什么样的魔法?

最佳答案

一段时间后,我找到了问题的根本原因。我对 MessageBodyReader/Writer 的实现没问题(而且我在 RESTlet 上运行良好),但是如果您使用 JerseyTest,请不要忘记将您的 MessageBodyReader/Writer 添加到它的 ClientConfig 中:

/**
* Creates custom REST client config which is mandatory since we don't use any JSON providers.
* @return Jersey Client Config with the required classes to read/write in(out)coming data.
*/
private static ClientConfig createClientConfig() {
final ClientConfig config = new DefaultClientConfig();
config.getClasses().add(GsonMessageBodyHandler.class);
config.getClasses().add(GsonAwareContextResolver.class);
return config;
}

/**
* Public ctor
* @throws com.sun.jersey.test.framework.spi.container.TestContainerException On error
*/
public MyRestExposureTest() throws TestContainerException {
super(new WebAppDescriptor.Builder("my.rest.package")
.clientConfig(createClientConfig())
.contextPath("/")
.build());
}

否则您的客户端代码将无法读取/写入您的 POJO。

关于java - Jersey 没有看到我的 MessageBodyReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111836/

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