JAX-RS:在payara micro上序列化POJO失败

时间:2017-02-03 14:36:07

标签: glassfish jax-rs jackson2 payara-micro

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

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

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

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

那个给我们错误:

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

如果你想使用杰克逊,你必须:

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

如何在此答案中执行此操作:Customizing JSON marhsalling with GlassFish v4