This repository was archived by the owner on Jan 22, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 76
This repository was archived by the owner on Jan 22, 2019. It is now read-only.
CsvMapper and @JsonFilter annotation #20
Copy link
Copy link
Closed
Description
CsvMapper does not generate valid output, when I trying to use it against bean with @jsonfilter annotation.
There are 2 problems here:
- I use csv schema with header generation. Filter do not affect on header.
- JsonFilter damages csv content by removing coma column separator.
public class AppTest {
@Test
public void testCsvMapperWithJsonFilter() throws JsonProcessingException {
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(Company.class).withLineSeparator("\n").withHeader();
SimpleFilterProvider filterProvider = new SimpleFilterProvider()
.addFilter(COMPANY_FILTER, FilterExceptFilter.filterOutAllExcept("name", "ticker"));
String actual = mapper.writer(filterProvider).withSchema(schema).writeValueAsString(createCompanies());
System.out.println(actual);
StringBuilder expected = new StringBuilder("name,ticker")
.append('\n')
.append("name1,ticker1")
.append('\n')
.append("name2,ticker2")
.append('\n')
.append("name3,ticker3");
Assert.assertEquals(expected, actual);
}
private static List<Company> createCompanies() {
return Arrays.asList(
new Company(1, "name1", "ticker1")
, new Company(2, "name2", "ticker2")
, new Company(3, "name3", "ticker3"));
}
@JsonFilter(COMPANY_FILTER)
public static class Company {
static final String COMPANY_FILTER = "COMPANY_FILTER";
private int id;
private String name;
private String ticker;
private Company(int id, String name, String ticker) {
this.id = id;
this.name = name;
this.ticker = ticker;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTicker() {
return ticker;
}
public void setTicker(String ticker) {
this.ticker = ticker;
}
}
}
Metadata
Metadata
Assignees
Labels
No labels