1
중첩 POJO를 CSV로로드하려고했습니다. 내가 할 수없는 어떤 오류 때문에 나는 그것을 가능하게 만들었다.슈퍼 CSV로 중첩 된 POJO를 읽는 중
아래 코드를 찾으십시오. 아래의 Person 클래스는 두 개의 POJO 필드 주소와 attribs
public class Person
{
public String firstname;
public String lastname;
public PersonAttribute attribs;
public Address address;
//Getters and setters
}
PersonAttribute class
{
public int height;
public int weight;
//Getters and setters
}
주소 클래스를 포함
public class Address
{
public String city;
public String zipCode;
public GeoLocation geoLocation;
// getter 및 setter }
인 GeoLocation
public class GeoLocation
{
private String latitude;
private String longitude;
// 게터와 세터 }
이제 CSV 및 Person 클래스를 읽으려고합니다. 나는 그것을 작동하게 할 수 없다. 여기에 내가 스레드 "기본"org.dozer.MappingException에 아래의 오류 예외를 얻고있다
public class ReadWithCsvDozerBeanReader
{
private static final String CSV = "firstname, lastname, height, weight, city,zipcode,latitude,longitude\n"
+ "bill,smith,180,200,ABC,123,48.8525525,2.3417763\n" + "james,smith,192,250,DEF,456,48.852129,2.3355093";
private static final int ATT_START_INDEX = 2;
private static final int ADDRESS_START_INDEX = 4;
private static final int GEO_LOCATION_START_INDEX = 6;
// custom preferences required because CSV contains spaces that aren't part
// of the data
private static final CsvPreference PREFS = new CsvPreference.Builder(
CsvPreference.STANDARD_PREFERENCE).surroundingSpacesNeedQuotes(true).build();
public static void main (String[] args) throws IOException
{
readWithCsvDozerBeanReader(new StringReader(CSV));
}
private static void readWithCsvDozerBeanReader (final Reader reader) throws IOException
{
ICsvDozerBeanReader beanReader = null;
try
{
beanReader = new CsvDozerBeanReader(reader, PREFS);
final String[] header = beanReader.getHeader(true);
// set up the field mapping, processors and hints dynamically
final String[] fieldMapping = new String[header.length];
final CellProcessor[] processors = new CellProcessor[header.length];
final Class<?>[] hintTypes = new Class<?>[header.length];
for (int i = 0; i < header.length; i++)
{
if (i < ATT_START_INDEX)
{
// normal mappings
fieldMapping[i] = header[i];
processors[i] = new NotNull();
hintTypes[i] = Person.class;
}
else if (i < ADDRESS_START_INDEX)
{
// attribute mappings
fieldMapping[i] = header[i];
processors[i] = new NotNull();
hintTypes[i] = PersonAttribute.class;
}
else if (i < GEO_LOCATION_START_INDEX)
{
// Address mappings
fieldMapping[i] = header[i];
hintTypes[i] = Address.class;
}
else
{
fieldMapping[i] = header[i];
hintTypes[i] = GeoLocation.class;
}
}
beanReader.configureBeanMapping(Person.class, fieldMapping, hintTypes);
Person person;
while ((person = beanReader.read(Person.class, processors)) != null)
{
System.out.println(String.format("lineNo=%s, rowNo=%s, person=%s", beanReader.getLineNumber(),
beanReader.getRowNumber(), person));
}
}
finally
{
if (beanReader != null)
{
beanReader.close();
}
}
}
}
내 코드는 다음과 같습니다 없음 읽거나 내가 그것을 가지고