【问题标题】:JAX-RS: serializing a POJO fails on payara microJAX-RS:在 payara micro 上序列化 POJO 失败
【发布时间】:2017-06-20 23:12:49
【问题描述】:

在将我们的应用程序战争从 Glassfish3 转移到使用 Payara Micro 的部署之后,JAX-RS 序列化(jersey + jackson)不再起作用。

感谢Adam,我们解决了序列化纯集合的问题,现在我们在返回 POJO 时遇到了类似的错误:

@GET
@Produces("application/json")
public BirdyTO findAllDaBirdy() {
    return getBirdy();
}

其中 BirdyTO 是一个 POJO,其中包含其他 POJOS 和/或 POJOS 集合。

那个给我们错误:

MessageBodyWriter not found for media type=application/json;charset=utf-8, type=class org.example.BirdyTO, genericType=class org.example.BirdyTO.

奇怪的是,同一应用程序中的类似接口工作正常。

有什么想法吗?

【问题讨论】:

  • 您是否检查过 .war 包含所有必需的杰克逊依赖项?您能否添加 BirdyTO 类代码。

标签: glassfish jax-rs jackson2 payara-micro


【解决方案1】:

POJO 到 JSON 的映射在 Java EE 中没有标准化。 Glassfih 4/Payara 默认使用 MOXy 将 POJO 映射到 JSON,它使用 JAXB 进行映射。请参阅 [Reza Rahman 的这篇文章] (https://blogs.oracle.com/theaquarium/entry/moxy_is_the_new_default)。 Moxy 可能无法映射 BirdyTO。

如果你想使用 Jackson,你必须:

  • 禁用默认 Moxy 功能(通过将 jersey.config.server.disableMoxyJson 属性设置为 true
  • 将 Jackson 库添加到您的应用中 (com.fasterxml.jackson.jaxrs)
  • 在您的 JAX-RS 应用程序中打开 JacksonFeature(由 Jackson 库提供)

更多信息如何在这个答案中做到这一点:Customizing JSON marhsalling with GlassFish v4

【讨论】:

  • 黄金信息和正确的解决方案。非常感谢!仍然不知道为什么 MOXy 无法映射一些 POJO,但我想我们应该坚持使用 jackson,因为我们首先使用它构建了我们的应用程序。
  • 我们明白了。显然 MOXy 要求传输 POJO 具有默认构造函数。
  • 在 Java EE 8 中,映射应该由 JSON-B 规范标准化。在那之前,行为会在这样的细微差别上有所不同。请将答案标记为正确答案 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多