gpt4 book ai didi

java - 如何防止 CsvMapper 在输出 CSV 中包含无法识别的字段?

转载 作者:行者123 更新时间:2023-12-02 06:23:22 28 4
gpt4 key购买 nike

CsvMapper@JsonPropertyOrder 结合使用时,所有未显式命名的字段都将放在 CSV 记录的末尾。这意味着拼写错误会导致不同的 CSV 排序。

示例:

public class Example {
public static void main(String[] args) throws JsonProcessingException {
final CsvMapper csvMapper = new CsvMapper();
System.out.println(csvMapper.writerWithSchemaFor(MyClass.class).writeValueAsString(new MyClass("test", true, 2)));
}

@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonPropertyOrder({"name", "code"})
public static class MyClass {

@JsonProperty("name")
private String name;

@JsonProperty("status")
private boolean status;

@JsonProperty("code")
private Integer code;
}
}

结果为:test,2,true。由于 status 未在 @JsonPropertyOrder 中显式命名,因此它被放置在记录的末尾。我更希望 CsvMapper 抛出异常或者根本没有序列化。

另一个例子是,如果我将上面的 @JsonPropertyOrder 更改为 @JsonPropertyOrder({"name", "stats", "code"})。请注意 stats 中的拼写错误。这将产生与上面相同的 CSV。

如何将 CsvMapper 配置为在无法识别的属性上失败或不序列化 @JsonPropertyOrder 中未命名的属性?

最佳答案

恕我直言,@JsonPropertyOrder 的唯一目的是让您有机会定义属性的顺序。对于未指定的字段,您只能使用alphabetic属性来控制它们的顺序。因此,注释会忽略拼写错误,只关心您在其 value 属性中指定的已知字段名称。

如果您需要更精细地控制用于(反)序列化的 Activity 字段,您可以使用 @JsonIgnoreProperties在你的类(class)或 @JsonIgnore在你的田野上。

也许这个类比很有帮助:考虑一个 SQL 语句 - 您SELECT 表中的行,然后ORDER 结果集。这里的ORDER命令对结果集的长度或宽度也没有影响。

关于java - 如何防止 CsvMapper 在输出 CSV 中包含无法识别的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55812988/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com