【发布时间】:2021-06-17 09:46:08
【问题描述】:
我有一个使用 JAXB 注释的嵌套对象作为输入并生成 JAXB 注释的嵌套对象的 REST Web 服务。
你可以把我的嵌套对象想象成这样;
{
"propertyOne": "bla bla",
"propertyTwo": "5",
objectB: {
"propertyA": "xyz",
"propertyB": "true"
}
}
还有我对 Web 服务的资源定义,例如;
@POST
@Path("/abc")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public ObjectC search(ObjectA objectA) {
// some logic
}
这是一个在 weblogic 12c 上使用 java1.8 的工作结构。但是在迁移到 java11 和 weblogic 14c 后,当我向这个 Web 服务发送请求时,我在搜索资源中收到了一个空的 objectA,例如;
{
"propertyOne": "",
"propertyTwo": "",
objectB: null
}
存在解组问题,这是为什么呢?任何想法...
NOT:过去使用的库我使用 MOXY 作为 JSON 提供程序
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<scope>provided</scope>
</dependency>
【问题讨论】:
-
WebLogic 14 使用哪个版本的 Jersey? Moxy 甚至可能不再是默认设置。如果您想确保使用 Moxy,请不要将其作为提供的内容并显式注册 Moxy 提供程序(或功能)
-
@PaulSamsotha,谢谢您的回复。我删除了 moxy 的作用域并注册了 MoxyJsonFeature 但现在我收到了一个错误;引起:java.lang.ClassCastException:类 org.glassfish.jersey.logging.LoggingFeatureAutoDiscoverable 无法转换为类 org.glassfish.jersey.internal.spi.AutoDiscoverable(org.glassfish.jersey.logging.LoggingFeatureAutoDiscoverable 位于未命名的模块中loader weblogic.utils.classloaders.ChangeAwareClassLoader @1ac42b0d; org.glassfish.jersey.internal.spi.AutoDiscoverable 在 loader com.oracle.classloader.weblogic.LaunchClassLoader @13e39c73 的未命名模块中)
-
如果 WebLogic 已经有 MOXy 库,您可能可以将范围放回去。注册该功能应该足以确保使用 MOXy。我认为错误可能是由于您在应用程序中使用的 Jersey 版本不同,而 Jersey WebLogic 的版本不同
-
嗨@PaulSamsotha,你是对的,注册就够了,它奏效了。我认为 weblogic 仍然保留了 moxy 库。
标签: java rest jersey unmarshalling moxy