При использовании 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
?