从 Wildfly8 升级到 Wildfly17,子属性未出现在 API 响应中
Upgrading from Wildfly8 to Wildfly17, Child attributes are not coming in API response
正在从 Wildfly-8.1.0.Final 升级到 Wildfly-17.0.1.Final
class Parent {
String prop1;
public Parent(String prop1) {
this.prop1 = prop1;
}
}
class Child extends Child {
String prop2;
public Child(String prop1, String prop2) {
super(prop1);
this.prop2 = prop2;
}
}
在控制器层
public Parent getDetails() {
return serviceImpl.getDetails();
}
在服务层
public Child getDetails() {
return new Child("String1", "String2");
}
从 Wildfly 8,我们得到
{
"prop1": "String1",
"prop2": "String2"
}
但是从 Wildfly 17 开始,我们得到
{
"prop1": "String1"
}
我们认为这可能是由于 Jackson 库,所以我们将 pom.xml 中的 jackson 库版本更改为 2.3.2,而 运行 Wildfly 17,但它仍然以相同的方式出现
我们也尝试将 Jackson 2.9.8 与 Wildfly 8 一起使用,但 WF8 仍然返回了属性 "prop1" 和 "prop2"
我们正在努力寻找这方面的根本原因,它是否与 WF17 的内部实现有关,或者我们是否遗漏了其他内容?
已编辑
我们又尝试了一件事情:我们试图在独立 java 代码上重现 Jackson 库的问题,但我们无法重现。
尽管当 运行 具有 Jackson 2.6.0 以上版本时,它仍然与 Wildfly 8 或 Wildfly 17 一起出现,但直到 2.5.5 才出现。
当您切换到另一个 Jackson 版本时,您是否排除了 Jackson regular/default 罐子,以便您的罐子优先?
这可以通过添加名为 "jboss-deployment-structure.xml" 的文件(放在 WEB-INF 文件夹下)来完成,其内容是 - 例如:
<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
<exclusions>
<module name="com.fasterxml.jackson.core.jackson-databind"/>
<module name="com.fasterxml.jackson.core.jackson-core"/>
<module name="com.fasterxml.jackson.core.jackson-annotations"/>
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider"/>
您可以在这里找到各种 Jackson 模块:
.../wildfly-17.0.1.Final/modules/system/layers/base/com/fasterxml/jackson
希望对您有所帮助
您也可以尝试使用 Jackson 注释来注释您的超级 class(例如 Parent
),以便将 Child
注册为子class。
@JsonTypeInfo(use=Id.NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value=Child.class, name="child"),
})
请注意,如果您需要 反序列化 您的 json,这还不够。
看看这里:
http://federico.defaveri.org/2016/11/20/handling-polymorphism-with-jackson/
问题已修复:这是由于我们使用的 spring 版本,4.2.0(此版本 spring不支持 Jackson 2.6+ 版本) 这就是它来自 Jackson 2.6.0 的原因。
这是 spring 中的一个错误,已在 Spring 4.2.1
中修复
https://github.com/spring-projects/spring-framework/issues/18008
https://jira.spring.io/browse/SPR-13429?redirect=false
现在它也可以与 Spring 4.2.1 和 Jackson 2.9.9 一起使用。
正在从 Wildfly-8.1.0.Final 升级到 Wildfly-17.0.1.Final
class Parent {
String prop1;
public Parent(String prop1) {
this.prop1 = prop1;
}
}
class Child extends Child {
String prop2;
public Child(String prop1, String prop2) {
super(prop1);
this.prop2 = prop2;
}
}
在控制器层
public Parent getDetails() {
return serviceImpl.getDetails();
}
在服务层
public Child getDetails() {
return new Child("String1", "String2");
}
从 Wildfly 8,我们得到
{
"prop1": "String1",
"prop2": "String2"
}
但是从 Wildfly 17 开始,我们得到
{
"prop1": "String1"
}
我们认为这可能是由于 Jackson 库,所以我们将 pom.xml 中的 jackson 库版本更改为 2.3.2,而 运行 Wildfly 17,但它仍然以相同的方式出现
我们也尝试将 Jackson 2.9.8 与 Wildfly 8 一起使用,但 WF8 仍然返回了属性 "prop1" 和 "prop2"
我们正在努力寻找这方面的根本原因,它是否与 WF17 的内部实现有关,或者我们是否遗漏了其他内容?
已编辑
我们又尝试了一件事情:我们试图在独立 java 代码上重现 Jackson 库的问题,但我们无法重现。
尽管当 运行 具有 Jackson 2.6.0 以上版本时,它仍然与 Wildfly 8 或 Wildfly 17 一起出现,但直到 2.5.5 才出现。
当您切换到另一个 Jackson 版本时,您是否排除了 Jackson regular/default 罐子,以便您的罐子优先?
这可以通过添加名为 "jboss-deployment-structure.xml" 的文件(放在 WEB-INF 文件夹下)来完成,其内容是 - 例如:
<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
<exclusions>
<module name="com.fasterxml.jackson.core.jackson-databind"/>
<module name="com.fasterxml.jackson.core.jackson-core"/>
<module name="com.fasterxml.jackson.core.jackson-annotations"/>
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider"/>
您可以在这里找到各种 Jackson 模块: .../wildfly-17.0.1.Final/modules/system/layers/base/com/fasterxml/jackson
希望对您有所帮助
您也可以尝试使用 Jackson 注释来注释您的超级 class(例如 Parent
),以便将 Child
注册为子class。
@JsonTypeInfo(use=Id.NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value=Child.class, name="child"),
})
请注意,如果您需要 反序列化 您的 json,这还不够。 看看这里: http://federico.defaveri.org/2016/11/20/handling-polymorphism-with-jackson/
问题已修复:这是由于我们使用的 spring 版本,4.2.0(此版本 spring不支持 Jackson 2.6+ 版本) 这就是它来自 Jackson 2.6.0 的原因。
这是 spring 中的一个错误,已在 Spring 4.2.1
中修复https://github.com/spring-projects/spring-framework/issues/18008
https://jira.spring.io/browse/SPR-13429?redirect=false
现在它也可以与 Spring 4.2.1 和 Jackson 2.9.9 一起使用。