我有,它通常只输出JSON。
现在,我还想导出一些端点的CSV。
杰克逊有一个图书馆
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>2.8.5</version>
</dependency>我可以使用Spring的HttpMessageConverter。
但是,我需要排除JSON中存在的CSV中的一些字段,因此我不能使用@JsonIgnore注释。是否有一种为CSV使用不同的忽略属性/注释的方法?
作为另一种选择,我考虑使用自定义接口来提取值,以便在实际操作前序列化这些值。List<CSVableDTO> -> List<Map<String,?>> -> CSV.但我想避免这种情况,因为它涉及额外的实例创建和额外的编码,而不是仅仅使用一个新的注释。
Java-类-示例:
public class MyDTO {
@CSVIgnore
public int id;
public String name;
public String property;
@CSVIgnore
public String ref;
}JSON-示例:
[
{
"id": 42,
"name": "Example",
"property": "FooBar",
"ref": "42:Not:FooBar:1337"
}
]预期-CSV-结果:
"name";"property"
"Example";"FooBar"发布于 2017-09-04 09:02:18
请考虑使用 mechanism。你会得到这样的东西:
public class Foo {
public interface JsonOnly{}
public interface CsvView{}
@JsonView(JsonOnly.class)
private Integer secretNotForCsv;
// ...
}
@RestController
public class FooController {
@RequestMapping(...)
@JsonView(Foo.JsonOnly.class)
public Foo getJson() {
// ...
}
@RequestMapping(...)
@JsonView(Foo.CsvView.class)
public Foo getCsv() {
// ...
}
}这只是一个非常粗略的草图,但它应该给你一个想法。
https://stackoverflow.com/questions/46033553
复制相似问题