FasterXML / FasterXML/jackson-dataformats-text

`CsvMapper` does not respect `CsvSchema.ColumnType` when using `@JsonAnySetter`

オープン
#60 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
csv
主要言語
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 はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。