FasterXML / FasterXML/jackson-dataformats-text
`CsvMapper` does not respect `CsvSchema.ColumnType` when using `@JsonAnySetter`
- 主要言語
- Java
- スター
- 455
- フォーク
- 164
- 平均マージ
- 6日 10時間
- マージ済み PR(30日)
- 2
説明
Variation of the AnySetterTest.java test...
Following code fails at `assertEquals(true, entry.stuff.get("extra"))` because value in `stuff` is a string, not a boolean. Expected that setting `CsvSchema.ColumnType.BOOLEAN` on the schema would cause mapper to pass a boolean to `@JsonAnySetter` method:
public static void testManualSchemaWithAnySetter() throws Exception
{
CsvMapper mapper = new CsvMapper();
CsvSchema.Builder schemaBuilder = CsvSchema.builder()
.addColumn("name", CsvSchema.ColumnType.STRING)
.addColumn("age", CsvSchema.ColumnType.NUMBER)
.addColumn("gender", CsvSchema.ColumnType.STRING)
.addColumn("extra", CsvSchema.ColumnType.BOOLEAN);
CsvSchema schema = schemaBuilder.build().withHeader();
Entry entry = mapper.readerFor(Entry.class).with(schema).readValue(
"name,age,gender,extra\nBarbara,35,F,true\n");
assertEquals(35, entry.age);
assertEquals("F", entry.stuff.get("gender"));
assertEquals(true, entry.stuff.get("extra"));
assertEquals(2, entry.stuff.size());
}
Unchanged from original test:
static class Entry {
Map stuff = new LinkedHashMap();
public int age;
public String name;
@JsonAnySetter
public void set(String key, Object value) {
// for secondary test, where name remains empty:
if (key.isEmpty()) {
key = String.valueOf(stuff.size());
}
stuff.put(key, value);
}
}
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。