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 데이터 형식으로 보냈습니다. 예시는 아래와 같습니다.
'오픈소스 > 스프링' 카테고리의 다른 글
[Spring] JNDI 설정법 및 테스트 (0) | 2021.10.13 |
---|---|
[Spring] Apache Jmeter 로 웹서버 성능 체크하기 (0) | 2021.10.05 |
[Spring] AOP 설명 및 예제 (0) | 2021.10.01 |
[Spring] PropertyPlaceholderConfigurer - 외부 설정 프로퍼티 설정 및 작업 (0) | 2021.10.01 |
[Spring] CORS with Spring Framework (0) | 2021.10.01 |