제 사례는 Java POJO를 CSV 문자열로 변환 할 수 있어야하는 일반 CSV 변환기를 작성하는 것이 었습니다.일반 POJO를 CSV 변환기로 작성하기
내 구현 :
public <T> List<String> convertToString(List<T> objectList) {
List<String> stringList = new ArrayList<>();
char delimiter = ',';
char quote = '"';
String lineSep = "\n";
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(!HOW_TO!);
for (T object : objectList) {
try {
String csv = mapper.writer(schema
.withColumnSeparator(delimiter)
.withQuoteChar(quote)
.withLineSeparator(lineSep)).writeValueAsString(object);
} catch (JsonProcessingException e) {
System.out.println(e);
}
}
return stringList;
}
내가 잭슨 DATAFORMAT-CSV 라이브러리를 사용했다,하지만 난 HOW_TO와 붙어있어! 부분, 즉 objectList로부터 객체의 .class를 추출하는 방법. 나는 공부하고 있었고 타입 삭제를 보았습니다. 그래서 저는 .class를 매개 변수로 내 함수에주는 것 외에는 불가능하다고 생각합니다. 하지만 Java Reflection을 사용하여 일반 개체에서이 개체 목록을 추출하기 때문에 .class 매개 변수를 제공하는 옵션을 사용할 수 없습니다.
해결 방법이 있습니까?
또는
내가 구분, 인용 부호, 라인 분리 등
감사를 추가하는 기능을 일반 List<T> objectList to List<String> csvList
을 변환 할 수있는 다른 방법/라이브러리
목록의 첫 번째 요소가 목록의 다른 요소와 공유되지 않는 하위 클래스 일 경우 어떻게 될까요? –
그때는 문제가되지 않습니다. 목록입니다. 목록을 통해 수퍼 클래스로 알려져 있습니다. 서브 클래스를 처리하기 위해 매퍼가 필요할 경우 솔루션은 간단합니다.for 루프에서 스키마를 다시 작성하고 각 요소에서 동일한 getClass를 수행하면된다. 그의 예에서 그는 자신의 스키마를 루프 밖으로 설정 했으므로 목록의 모든 요소는 동일한 방식으로 처리되어야한다고 가정했습니다. 따라서 특별한 경우가 필요 없습니다. –
예, 중요합니다. 'List'이 주어지면, 모든 요소를 똑같이 다루기를 원하면'Class'는'MyBaseClass'입니다. 그러나 요소 0이 런타임 유형이 'SubclassA'인 인스턴스를 가리킨다면 메소드는 자신이 'List '을 가지고 있다고 확신하게 될 것이고 다른 모든 인스턴스도 그 일이 아니라면 빨리 문제가 발생할 것입니다 아강. 귀하의 진술은 "그것은 수퍼 클래스로서 목록을 통해 알려져 있습니다"잘못된 것입니다. 목록의 참조 유형은'Object'입니다. 런타임 유형은 실제 서브 클래스 유형입니다. 컴파일시에만 기본 클래스로 알려져 있습니다. –