본문 바로가기

오픈소스/스프링

[Spring] Jackson의 ObjectMapper을 이용한 String to Object[VO] & Object[VO] to String

Jackson의 ObjectMapper는 Object에서 String으로, String에서 Object로 변경하는 라이브러리입니다. 실제로 RestAPI 통신과 여러 API를 사용하고자 할 때 가장 많이 쓰이는 라이브러리는 Gson과 Jackson이라고 생각합니다. 성능의 비교는 아래와 같습니다.

 

큰 파일 파싱

이미지 출처 http://blog.takipi.com


작은 파일 파싱

이미지 출처 http://blog.takipi.com

 

대량의 데이터를 이용할 때에는 Jackson을 이용하고, 소량의 데이터를 이용할 때에는 Jackson을 사용하는 것을 추천하는 그림입니다. Spring boot에서는 Jackson이 기본적으로 내장되어 있다고 해서, 오늘은 Spring에서 Jackson의 Object.Mapper 에 대해 정리해보았습니다.

 

 본 글은 작성중이므로 업데이트가 될 수 있습니다.

 

 

# Contents


  • Jackson ObjectMapper 사용방법

 

 

# Jackson ObjectMapper 사용법


 스프링에서 데이터를 전송하고 수신하는 과정에서 받아온 데이터를 VO객체로 넘기고, VO 객체에서 반대로 String 형태로 변환해주는 작업이 있을 수 있습니다. 실제로 RestAPI 의 경우 RequestBody 부분을 String 형태로 받아서 VO 객체로 변환 후 프로세스 처리 한 다음에 VO 객체를 String으로 변환하는 작업을 많이 해왔었는데요. 

 

 그러면 이 작업을 실제적으로 해보는 시간을 갖도록 하겠습니다.

 

0. pom.xml  라이브러리 확인

 Jackson 개발을 위해 pom에 라이브러리가 있는지 확인해야합니다. 라이브러리가 존재하지 않으면 이 글을 pom.xml을 작성해주시기 바랍니다.

		<!-- Jackson -->
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-core-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>

 

확인이 끝나신 분들은 간단한 VO 객체를 선언해보도록 하겠습니다.

 

1. Class 생성

MemberVO.java 를 com.mycom.myapp.vo 패키지에 생성하겠습니다.

패키지명과 클래스명은 각자 알아서 정해주시기 바랍니다.

 

 

 

생성된 클래스 안에 아래 코드로 바꿔보겠습니다.

public class MemberVO {
	public String id;
	public String password;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

 

2. Jackson Util Class 생성

JacksonUtil.java 를 com.mycom.myapp.util 패키지에 생성하겠습니다.

패키지명과 클래스명은 각자 알아서 정해주시기 바랍니다.

 

 

 

생성된 클래스 안에 아래 코드로 바꿔보겠습니다.

import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonUtil {
	public Object str2Obj(String str, Class<?> classType) throws JsonParseException, JsonMappingException, IOException {
		ObjectMapper mapper = new ObjectMapper();
		return mapper.readValue(str, classType);
	}
	
	public String obj2Str(Object classType) throws JsonGenerationException, JsonMappingException, IOException {
		ObjectMapper mapper = new ObjectMapper();
		return mapper.writeValueAsString(classType);
	}
}

 

3. Controller 생성 혹은 수정

테스트의 간단화를 위해 HomeController.java 에 추가하였습니다. 컨트롤러 경로는 /test를 추가하였고, 코드는 아래와 같습니다.

	@RequestMapping(value = "/test", method = RequestMethod.POST)
	public ModelAndView home2(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestbody) throws JsonParseException, JsonMappingException, IOException {
		
		logger.info("Request Body : " + requestbody);
		JacksonUtil jacksonUtil = new JacksonUtil();
		MemberVO member = (MemberVO) jacksonUtil.str2Obj(requestbody, MemberVO.class);
		
		member.password = member.password.toString() + "123456";
		String result = jacksonUtil.obj2Str(member);
		
		logger.info(result);
		response.getWriter().write(result);
		return null;
	}

 

 

4. 테스트

테스트는 Postman, JSON 데이터 형식으로 보냈습니다. 예시는 아래와 같습니다.