加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Jersey没有看到我的MessageBodyReader

发布时间:2020-12-14 05:25:54 所属栏目:Java 来源:网络整理
导读:我正在尝试使用自己的json MessageBodyReader / MessageBodyWriter(因为我没有在我的域类上使用@XmlRootElement …注释). @Provider@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)public final class MyGsonMessageBodyHandle
我正在尝试使用自己的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中的断点处停止). Hovewer它没有看到这个类作为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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读