Skip to content
This repository was archived by the owner on Jan 22, 2019. It is now read-only.
This repository was archived by the owner on Jan 22, 2019. It is now read-only.

CsvMapper and @JsonFilter annotation #20

@mablaev

Description

@mablaev

CsvMapper does not generate valid output, when I trying to use it against bean with @jsonfilter annotation.
There are 2 problems here:

  1. I use csv schema with header generation. Filter do not affect on header.
  2. 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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions