如何在JBoss 7.1.1上为RestEasy设置JSON提供程序?
RestEasy文档说:
RESTEasy允许您将JAXB带注释的POJO与JSON进行编组 . 此提供程序包装Jettison JSON库以实现此目的 .
但我发现似乎在JBoss 7.1.1上Resteasy使用了Jackson提供程序,因为我的类字段上的@XmlTransient被忽略了,但@JsonIgnore被处理了 .
我如何告诉Resteasy使用Jettison而不是Jackson?
在Jboss上我找到了两个提供商 .
4 回答
如果你只想要一个比标准模块拉不同的模块,你可以在一个特定于jboss的部署描述符中提供它 .
阅读https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7以了解详细信息,并阅读https://docs.jboss.org/author/display/AS7/Implicit+module+dependencies+for+deployments以了解JBoss默认使用的模块 .
要交换这两个提供商,请在下面提供以下内容
META-INF/jboss-deployment-structure.xml
.这为我改变了提供者 .
Br亚历山大 .
作为 ahus1 答案的后续内容:如果您有一个多级部署存档(即包含EJB jar和war文件的顶级EAR文件),则需要在任何子目录上配置
org.jboss.resteasy.resteasy-jackson-provider
的排除-deployment包含RESTEasy / JAX-RS组件 .例如,在我的部署中,我的REST endpoints 在EJB jar文件中的EJB之上进行了注释,而激活RESTEasy的
@ApplicationPath
-notnotatedjavax.ws.rs.core.Application
子类则在我的war文件中 . 我发现将排除项单独放在顶级(EAR)部署(如在ahus1的示例中)或在EJB-jar级别部署上的方法是无效的,但我终于得到了RESTEasy来使用Jettison而不是Jackson所有3个级别(EAR,EJB,Web)的排除:我很可能只需要对子部署进行排除,并将其放在主要的EAR部署上是多余的;我没有这样尝试,因为现在把它放在所有三个上似乎工作得很好 .
从我现在观察到的情况来看,Jackson是JBoss AS 7.1.2的默认设置 .
First ,RestEasy模块隐藏在应用程序的类加载器中,IMO不应该这样 . 所以我刚刚提交了https://issues.jboss.org/browse/AS7-5605 .
Second ,针对您的问题:要设置特定的提供者,您需要将其从AS中的类加载器中删除 - 所以再次使用
module.xml
's and comment out those providers which you don' t想要使用 - 如果Jackson可用,则RestEasy使用它;否则它使用Jettison .另外,将项目添加为编译时依赖项,这样您就可以使用它们的特定注释 . 例:
注意:在AS7-5605完成之前,您需要手动设置版本 . 之后(在AS的更高版本中),您必须删除这些版本并使用JBoss BOM中定义的版本 . 例如,请参见JBoss AS QuckStarts .
使用替代提供商随意create and contribute a QuickStart的RestEasy .
我将此行添加到standalone.conf.bat / sh并解决了我的问题 .
设置“JAVA_OPTS =%JAVA_OPTS%-Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager = true”