忽略csv和json中的不同字段

wbgh16ku  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(337)

我有一个springrestapi,它通常只输出json。
现在我还想导出一些端点的csv。
Jackson有一个图书馆

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-csv</artifactId>
    <version>2.8.5</version>
</dependency>

我可以用spring的 HttpMessageConverter .
但是,我需要排除csv中json中存在的一些字段,因此我不能使用 @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"
k4aesqcs

k4aesqcs1#

请考虑一下 JsonView 机制。你会得到这样的结果:

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() {
           // ...
       }
}

这只是一个非常粗略的草图,但它应该给你一个想法。

相关问题