首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >杰克逊元帅/元帅在jaxrs野蝇15中的表现不同

杰克逊元帅/元帅在jaxrs野蝇15中的表现不同
EN

Stack Overflow用户
提问于 2020-09-17 09:54:40
回答 1查看 120关注 0票数 0

为了给您一个小小的启发,我们正在将我们的应用程序从JBoss 7迁移到Wildfly 15,作为其中的一部分,我们将FasterXML (2.9.5)、RestEasy (3.6.2.final)的所有依赖项更新到Wildfly 15模块支持的版本。我们还更新了代码库,以使用fasterxml而不是codehaus。现在编译和部署已经成功。当我们通过邮递员触发REST请求时,有一些参数不能反序列化。示例如下所示。

代码语言:javascript
运行
复制
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User", propOrder = {
    "userInfo",
    "profiles",
    "groups"
})
public class User extends NfvdResource implements IUser {
    
    @XmlElement(name = "user-info", required = true)
    protected UserInfo userInfo;
    protected Profiles profiles;
    protected Groups groups;
..
..
}


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Groups", propOrder = {
    "group"
})
public class Groups implements IGroups {
    
    private List<Group> group;
 @Override
    public List<Group> getGroup() {
        if (group == null) {
            group = new ArrayList<Group>();
        }
        return this.group;
    }

    @Override
    public String toString() {
        return "Groups [group=" + group + "]";
    }

}

@XmlRootElement( name = "user")
public interface IUser extends IProfiles, IGroups {

    @JsonProperty("user-info")
    public UserInfo getUserInfo();

    @JsonIgnore
    public Profiles getProfiles();

    @JsonIgnore
    public Groups getGroups();

}

@XmlRootElement(name = "profiles")
public interface IProfiles {
    
    @JsonProperty("profiles")
    public List<Profile> getProfile();
}

public interface IGroups {

    @JsonProperty("groups")
    public List<Group> getGroup();
}

示例有效载荷如下所示。

代码语言:javascript
运行
复制
{
   "user-info":{"username":"dem115","name":"dem115","surname":"dem115","phonenumber":"123546","email":"abc@xyz.com","preferred-language":"en-us","preferred-theme":"light","role":"domain","password":"xxxx","public-key":"TBD"
},
   "profiles":[
            {"type":"domain","name":"administrator","description":"","operations":[]},
            {"type":"domain","name":"scriptManager","description":"","operations":[]}
   ],
   "groups":[
      {"domain":"sample.domain","datacenter":null,"organization":null,"tenant":null,"vnf":null,"type":"domain","@uri":"/abc/domains/95b3c440-843e-4163-b737-cc0f273238c1","@internal-id":"xxxxxx-843e-4163-b737-cc0f273238c1"}
   ],
}

对于上面的有效负载,profilesgroups参数在user对象中被设置为null,而JBoss 7和jackson1以及相关的配置则不是这样。我们是否遗漏了一些配置,因为迁移是我们不确定的部分。

为了使它发挥作用,我们提供了以下解决办法。只需在profilesgroups字段上添加@JsonUn包装注释,编组和解编组就可以了。

代码语言:javascript
运行
复制
@JsonUnwrapped
protected Profiles profiles;
@JsonUnwrapped
    protected Groups groups;

我们不知道我们早些时候在移徙问题上缺少了什么。此外,我们也不确定这个注释的副作用。这里的另一个问题是,我们在整个应用程序中都有类似的模式(大约250个java文件)。所以我们担心它会影响功能。

我们根本上缺少了什么东西吗?有人能在这里亮点光吗?经过一个多星期的调查,我们来到了这个论坛。

需要提到的另一点是,作为这个过程的一部分,我们也正在将java1.7迁移到jdk11。

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-10-25 06:25:02

这可以定制Jackson在json中序列化bean的方式。例如,在CDI容器中(如Wildfly):

代码语言:javascript
运行
复制
@Provider
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public class CustomizedJsonProvider extends JacksonJsonProvider {

    public CustomizedJsonProvider() {
        super();
        super.setMapper( initMapper() );
    }
    
    private static ObjectMapper initMapper() {
         ObjectMapper mapper = new ObjectMapper();
         mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)          
             .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)                                              
            .setSerializationInclusion(JsonInclude.Include.NON_NULL);
         return mapper; 
    }
    
}

请参阅所有特性这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63935571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档