小编Mol*_*Man的帖子

Jackson CsvMapper 嵌套对象字段

我想使用 jackson CsvMapper 将 Pojos 序列化/反序列化为 csv 格式。我的pojos:

public class User implements Serializable {

    String name;

    @JsonUnwrapped(prefix = "||")
    Role role;

    String email;
}

public class Role implements Serializable {

    Long id;

    String name;
}
Run Code Online (Sandbox Code Playgroud)

我现在得到的:

name|email|||id|||name 
New User|newuser@gmail.com|1|User 
New User2|newuser2@gmail.com|1|User 
New User3|newuser3@gmail.com|1|User
Run Code Online (Sandbox Code Playgroud)

我期望获得以下分隔符的内容:

New User|newuser@gmail.com|||1|User 
Run Code Online (Sandbox Code Playgroud)

(只有用附加分隔符分隔的嵌套对象,而不是其字段,分隔符也必须应用于数据,而不仅仅是标题)此外,我需要在行内移动嵌套对象。例如预期结果:

New User|||1|User|||newuser@gmail.com 
Run Code Online (Sandbox Code Playgroud)

我当前的架构和序列化代码:

 CsvSchema userSchema = csvMapper
            .schemaFor(User.class)
            .sortedBy("name", "role.name", "role.id", "email")
            .withoutQuoteChar()
            .withColumnReordering(true)
            .withColumnSeparator('|')
            .withHeader();

        csvMapper.writer(userSchema).writeValueAsString(users);
Run Code Online (Sandbox Code Playgroud)

java csv jackson

6
推荐指数
0
解决办法
2094
查看次数

如何使用 Jackson 序列化 BigDecimal 以映射值?

使用 Jackson 版本 2.7.3 将 BigDecimal 对象序列化为 Map 时遇到问题(我无法在项目中更改此版本)。它始终序列化为 Double。我用于序列化的代码:

public static Map<String, Object> serializeToMap(Object pojo) {
    return new ObjectMapper().convertValue(pojo, new HashMap<String, Object>() {}.getClass());
}
Run Code Online (Sandbox Code Playgroud)

尝试添加:

@JsonSerialize(typing = JsonSerialize.Typing.STATIC, as = BigDecimal.class)

并使用序列化器:

public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
    jgen.writeObject(value.toString());
}
Run Code Online (Sandbox Code Playgroud)

是否可以将其序列化为 BigDecimal?

java serialization jackson

4
推荐指数
1
解决办法
5111
查看次数

标签 统计

jackson ×2

java ×2

csv ×1

serialization ×1