FasterXML / FasterXML/jackson-dataformats-text

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

Open
#60 2 comments 0 reactions 0 assignees View on GitHub
csv
Dominant language
Java
Stars
455
Forks
164
Avg merge
6d 10h
Merged PRs (30d)
2

Description

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);
}
}

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.