Nous utilisons OpenCsv pour analyser un fichier CSV et lier ses valeurs directement à un objet de modèle (OpenJPA Entity Bean) à l'aide de Toutefois, le problème est - il existe certaines valeurs de CSV qui sont (évidemment) analysées sous forme code> code>, mais doivent être définies dans une propriété Y a-t-il une installation à l'intérieur de OpenCSV qui me permettrait de spécifier à quel type chaque colonne doit-elle être mappée? Sinon, avez-vous des suggestions quelle classe pour étendre / réimplement afin de faciliter cela? Inspection à d'autres stresses disponibles dans la distribution des sources OPENCSV sous Je suppose que je pourrait em> violez avec la date CODE> DATE CODE> Setter de propriété et faites-en une méthode générique qui permettrait d'émettre le type d'argument et d'essayer d'analyser la valeur transmise. dans J'ai frappé ma tête autour de cela pendant quelques heures - j'aurais pu avoir probablement résolu le problème en utilisant la réflexion et en écrivant ma propre logique de liaison de haricots, mais je déteste réinventer la roue et j'ai un sentiment / J'espère que cela pourrait être fait un peu facilement dans le cadre opencsv existant. P>
Si nécessaire, je pourrais poster du code, mais il n'y a vraiment pas beaucoup à voir. P>
Toute pensée? Thx. P> CSVTobean Code> Classe. P>
date code>, donc essentiellement csvtobean La classe décède en essayant d'invoquer dynamiquement la méthode d'écriture (c'est-à-dire qu'elle tente de définir une propriété de date avec une valeur de chaîne brute). P>
/ Test / AU / COM / BYTECODE / OPENCSV / Bean / CODE> N'a plus rapproché de conclusion. P>
date code> si ce n'est pas
date code> déjà, mais ... Nous utilisons des entités annotées de persistance et je n'ai aucun souhait de voir plus tard sur ce "Setter- HACK "Tirez-nous dans notre pied parce que OpenJPA Améliorant a soudainement détesté le setter générique. P>
3 Réponses :
Peut-être une méthode de réglage transitoire à côté de l'original fonctionnerait pour vous:
@Transient public void setDate(String date) { Date d = parseDate(date); setDate(d); } @Column public void setDate(Date date) { this.date = date; }
Que diriez-vous de créer une copie de la propriété Date dans votre définition de classe? Nous avons fait quelque chose de similaire à l'aide de beansutils
de sorte que votre classe de haricots contient p>
Merci à vous deux - en combinant efficacement vos suggestions, j'ai pu le faire fonctionner. Comme la suggestion de Kal est un peu plus proche de ma solution, j'ai accepté sa solution, mais j'ai voté vos deux réponses.
Alternativement, vous pouvez utiliser Super CSV , qui a un Processeur de cellule API qui vous permettrait de lire le haricot (sans modification) à l'aide du ParseDate processeur pour cette colonne. P>
Oui, supercsv code> est beaucoup mieux à ce type de fonctionnalité.