JJC's 테크니컬 다이어리

csv 파일을 읽고 json으로 반환하는 코드조각 본문

Spring

csv 파일을 읽고 json으로 반환하는 코드조각

털털한JJC 2019. 6. 27. 18:01

pom.xml

		<dependency>
		  <groupId>com.fasterxml.jackson.dataformat</groupId>
		  <artifactId>jackson-dataformat-csv</artifactId>
		</dependency>

Rest Controller

	/*************************************
	 * csv 파일을 일고 json으로 반환하여 던지는 서비스
	 * @param projno
	 * @param path
	 * @param filename
	 * @return
	 * @throws IOException
	 */
	@RequestMapping("/fileasjson/{projno}/{path}/{filename}")
	public List<Map<String,String>> readdat(@PathVariable("projno") String projno,@PathVariable("path") String path,@PathVariable("filename") String filename) throws IOException
	{
		
		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
		
		String startPath = basePath + projno + "\\"+path+"\\"+filename;

		CsvMapper mapper = new CsvMapper();
		// important: we need "array wrapping" (see next section) here:
		mapper.enable(CsvParser.Feature.WRAP_AS_ARRAY);
		
		File csvfile = new File(startPath); 
		logger.info(csvfile.getAbsolutePath());
		
		//Schema from POJO (usually has @JsonPropertyOrder annotation)
		//CsvSchema schema = mapper.schemaFor(Empolyee.class);
		
		CsvSchema schema = CsvSchema.builder()
		        .addColumn("a")
		        .addColumn("b")
		        .addColumn("c")
		        .addColumn("d")
		        .addColumn("e")
		        .addColumn("f")
		        .addColumn("g")
		        .addColumn("h")
		        .addColumn("i")
		        .addColumn("j")
		        .addColumn("k")
		        .addColumn("l")
		        .addColumn("m")
		        .addColumn("n")
		        .addColumn("o")
		        .addColumn("p")
		        .addColumn("q")
		        .addColumn("r")
		        .addColumn("s")
		        .addColumn("t")
		        .addColumn("u")
		        .addColumn("v")
		        .addColumn("w")
		        .addColumn("x")
		        .addColumn("y")
		        .addColumn("z")
		        .build();
		
		
		schema = schema.withColumnSeparator('\t').withNullValue("").withoutEscapeChar().withoutQuoteChar().withoutHeader();
		
		MappingIterator<Map<String,String>> it = mapper.readerFor(Map.class).with(schema).readValues(csvfile);
		
		while(it.hasNext()) {
		         list.add(it.next());
		}
        
		
		return list;
	}