【问题标题】:Glassfish JSON failureGlassfish JSON 失败
【发布时间】:2018-04-24 19:59:14
【问题描述】:

我在 Glassfish 的 RESTful 应用程序中使用 Jersey 将 POJO 序列化为 JSON 时遇到了一些困难。

当我将复杂的 POJO 作为端点“响应”传递时,我在 Glassfish 控制台中收到此错误:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: 未找到媒体类型=application/json、类型=

的 MessageBodyWriter

“复杂”是指根类包含许多类,并且许多类扩展了基类。

在将 POJO 传递给 Jersey 时,我已经弄清楚了以下规则:

1) 所有类都必须有一个空的构造函数 2) 任何内部类都必须是静态的 3) 任何内部类都必须在整个树中从基类中唯一命名

如果泽西岛能告诉我更多信息,那就太好了。它在拒绝的 POJO 中发现了什么?有没有办法让 Jersey 将特定问题或问题记录到 Glassfish 控制台,它在 POJO 中找到并传递回 Response?任何其他建议将不胜感激。

【问题讨论】:

  • 您是否尝试过使用带有gettersetter 方法的简单POJO?
  • POJO 是否用@XmlRootElement注解?
  • Arpit:用来序列化的POJO没有任何问题。当我增加复杂性时,它失败了。有时我会后退并慢慢添加代码,直到它失败然后我看到一个问题并且它运行正常。我需要的是 Jersey 告诉我关于它拒绝什么的更具体的细节。
  • Peeskillet:不需要注释。 POJO 可以很好地序列化,直到我对复杂性进行一些更改。我需要的是泽西岛关于为什么它被拒绝的更多细节。当 POJO 被拒绝时,关于如何让 Jersey 提供更多细节的任何想法?

标签: java json jersey glassfish


【解决方案1】:

找到解决方法(某种):

JAXBContext context;
try {
    context=JAXBContext.newInstance(<myclass>);
    Unmarshaller unmarshaller=context.createUnmarshaller();
    unmarshaller.setEventHandler(
        new javax.xml.bind.helpers.DefaultValidationEventHandler());
    } 
catch (JAXBException e) {
    System.out.println(e);
}

当它抛出时,会有一个列表进入控制台,描述任何问题。问题是这个 JAXBContext 不像 Jersey 中使用的那样现代。它列出了不存在的问题(例如注释接口的成员)。我浏览了错误(在我的案例中有 14 个),其中 13 个与注释接口成员有关。 14 号是我修复的有趣的,现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多