J'ai une API Spring REST qui ne génère généralement que du JSON.Ignorer différents champs dans CSV et JSON
Maintenant, je veux également exporter des fichiers CSV pour certains terminaux.
Jackson a une bibliothèque qui
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>2.8.5</version>
</dependency>
que je peux utiliser l'aide HttpMessageConverter
de printemps.
Cependant, j'ai besoin d'exclure certains champs dans le CSV qui sont présents dans le JSON, donc je ne peux pas utiliser l'annotation @JsonIgnore
. Existe-t-il un moyen d'utiliser une propriété/annotation ignore pour CSV? Comme alternative, j'ai envisagé d'utiliser une interface personnalisée pour extraire les valeurs afin de sérialiser les valeurs avant la main. List<CSVableDTO>
->List<Map<String,?>>
-> CSV. Mais je voudrais éviter cela car cela implique une création d'instance supplémentaire et un codage supplémentaire par rapport à l'utilisation d'une nouvelle annotation.
Java-classe Exemple:
public class MyDTO {
@CSVIgnore
public int id;
public String name;
public String property;
@CSVIgnore
public String ref;
}
JSON-Exemple:
[
{
"id": 42,
"name": "Example",
"property": "FooBar",
"ref": "42:Not:FooBar:1337"
}
]
attendu-CSV Résultat:
"name";"property"
"Example";"FooBar"
Cela ressemble à une solution prometteuse. Bien que je ne veuille pas créer une nouvelle méthode dans tous mes contrôleurs pour leur permettre de servir des CSV. (peut-être https://stackoverflow.com/questions/22875642/jackson-set-default-view) peut me sauver pour éviter les méthodes en double.) Je vais le tester et ensuite rendre compte. –
J'ai quelques problèmes avec le mappeur Jackson CSV mais votre solution fonctionne (au moins en utilisant JSON). –