0

在将我们的应用程序战争从 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.

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

任何的想法?

4

1 回答 1

0

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

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

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

更多信息如何在这个答案中做到这一点:使用 GlassFish v4 自定义 JSON 编组

于 2017-02-04T10:16:14.993 回答