0

使用CsvMapperwith 时@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

4

1 回答 1

0

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

如果您需要更精细地控制(反)序列化的活动字段,您可以@JsonIgnoreProperties在您的课程或@JsonIgnore字段上使用。

这个类比可能是有帮助的:考虑一个 SQL 语句——你SELECT是表中的行和ORDER之后的结果集。这里的ORDER命令也对结果集的长度或宽度没有影响。

于 2019-04-23T14:56:50.923 回答