Cette fois, c'est la réflexion à l'aide d'annotations. Les annotations de champ sont utiles lorsque vous souhaitez qu'un champ ait quelques attributs, mais que vous ne voulez pas l'écrire dans votre logique métier.
Celui que j'ai fait la dernière fois → Utilitaire pour remplir le champ de l'objet avec une valeur appropriée
Cette fois, j'ai créé une méthode Util qui convertit un objet Entity en horizontal (1 enregistrement de CSV).
AnnotationUtil Sortez la ligne d'en-tête avec la méthode getHeader. Sortez une ligne de données avec la méthode getData.
AnnotationUtil.java
package test1;
import java.lang.reflect.Field;
public class AnnotationUtil {
/**virgule*/
private static final String DELIMITER = ",";
/**Double devis*/
private static final String QUOTE = "\"";
/**
*Convertir l'utilisateur en ligne CSV 1.<br>
*L'utilisateur a@Renvoie le champ contenant les données sous la forme d'une ligne CSV.<br>
* isHeader=Si vrai, le titre est renvoyé au format CSV spécifié.
*/
public static String getUser(User obj, boolean isHeader, String delimiter, String quote) {
Field[] fieldList = obj.getClass().getDeclaredFields();
StringBuilder sb = new StringBuilder();
for (Field f : fieldList) {
f.setAccessible(true);
Data annotation = f.getAnnotation(Data.class);
if (annotation == null) {
continue;
}
String value;
try {
if (isHeader) {
value = annotation.title(); //Titre
} else {
value = String.valueOf(f.get(obj)); //valeur
}
} catch (IllegalArgumentException | IllegalAccessException e) {
//Étant donné que la déclaration throws est gênante, faites toutes les exceptions au moment de l'exécution
throw new RuntimeException(e);
}
//Lorsque le caractère de la boîte est spécifié
if (quote != null)
sb.append(quote);
//Valeur ou nom de l'article
sb.append(value);
//Lorsque le caractère de la boîte est spécifié
if (quote != null)
sb.append(quote);
//Délimiteur
sb.append(delimiter);
}
//Supprimer le dernier délimiteur
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}
public static String getHeader(User user) {
return getUser(user, true, DELIMITER, QUOTE);
}
public static String getData(User user) {
return getUser(user, false, DELIMITER, QUOTE);
}
}
Data Ajoutez cette annotation au champ à générer en tant que données CSV. Spécifiez le nom de l'en-tête avec le titre.
Data.java
package test1;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Target(FIELD)
@Retention(RUNTIME)
public @interface Data {
String title();
}
User Classe d'entité. Ajoutez une annotation de données au champ que vous souhaitez générer.
User.java
package test1;
public class User {
@Data(title = "ID d'employé")
public Integer id;
@Data(title = "Nom")
public String name;
public String insertDate;
public String insertUser;
public String updateDate;
public String updateUser;
}
Main Pour vérifier le fonctionnement de l'utilitaire.
Main.java
package test1;
public class Main {
public static void main(String[] args) {
System.out.println("### Start ###");
User user = new User();
user.id = 101;
user.name = "Albert";
user.insertDate = "20190501";
user.insertUser = "Chris";
user.updateDate = "20190512";
user.updateUser = "Jill";
System.out.println(AnnotationUtil.getHeader(user));
System.out.println(AnnotationUtil.getData(user));
System.out.println("### End ###");
}
}
python
### Start ###
"ID d'employé","Nom"
"101","Albert"
### End ###
Il a été converti de vertical à horizontal. Étant donné que les données ne sont ajoutées qu'à l'identifiant et au nom, seuls ces deux éléments sont correctement générés.
Au début, quand je l'ai implémenté sans utiliser l'EDI pour la première fois depuis un certain temps, pour une raison quelconque, les valeurs de retour de Field # getAnnotation () sont devenues toutes NULL. Cela a bien fonctionné lorsque j'ai utilisé l'IDE, mais pourquoi? ??
Recommended Posts