개발에필요한연동법/스프링연동

Spring3 jackson JSON 라이브러리 + ResponseBody 이용하여 JSON 파싱하기

개발로짜 2014. 11. 10. 22:03

이번에는 JSON 값을 RESPONSE 해주기 관련 포스팅을 진행해보도록 하겠습니다.


Spring을 제외한 다른 포스팅에 보통 json-simple 라이브러리를 이용하여 

json 구현을 했었습니다.


그러나 Spring3 에서 jackson 라이브러리와 Responsebody 어노테이션을 같이 사용하니 

엄청나게 심플하게 구현이 되는군요.


보통 JSON 객체를 생성하는 방식은 클라이언트에 JSON API 를 제공할때 주로 사용됩니다.


2가지 방식을 예로 들수 있겠는대요

Map 형식으로 response 해주는 방식

 vo객체에 담아서 object형식으로 response해주는 

2가지 방식을 들 수 있겠습니다.


각각의 예제에 들어가기전 jackson 라이브러리 사용을 위한 설정을 해주도록 합니다.


다음 dependency 코드를 pom.xml에 추가해줍니다.




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



이어서 mvc-config.xml 설정파일에 하단 태그를 추가해주도록 합니다.




<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />




2가지 코드를 각각의 파일에 삽입을 해주셨다면

 Jackson 라이브러리와 @ResponseBody 어노테이션을 이용하여 

간단하게 JSON API를 제작해보도록 하겠습니다.




1. Map을 이용하여 JSON API 생성하기


/**
 * Map방식을 이용한 JSON API 컨트롤러
 * @return
 */
@RequestMapping(value="/getJsonByMap")
public @ResponseBody Map<String , Object> getJsonByMap() {
	Map<String, Object> jsonObject = new HashMap<String, Object>();
	Map<String, Object> jsonSubObject = null;
	ArrayList<Map<String, Object>> jsonList = new ArrayList<Map<String, Object>>();
		
	//1번째 데이터
	jsonSubObject = new HashMap<String, Object>();
	jsonSubObject.put("idx", 1);
	jsonSubObject.put("title", "제목입니다");
	jsonSubObject.put("create_date", new Date());
	jsonList.add(jsonSubObject);
	//2번째 데이터
	jsonSubObject = new HashMap<String, Object>();
	jsonSubObject.put("idx", 2);
	jsonSubObject.put("title", "두번째제목입니다");
	jsonSubObject.put("create_date", new Date());
	jsonList.add(jsonSubObject);
		
	jsonObject.put("success", true);
	jsonObject.put("total_count", 10);
	jsonObject.put("result_list", jsonList);
		
	return jsonObject; 
}




최상단 루트 Map 객체에  다양한 종류의 map 객체들 및 list 객체들을 put 해주었습니다.

적용 후 실행을 해보도록 하겠습니다.




Map JSON API 응답결과






정상적으로 JSON 규격에 맞춰져서 API 데이터가 출력되었습니다.




2. VO을 이용하여 JSON API 생성하기




이번에는 보통 말하는 VO 객체를 사용하여 

JSON 객체를 클라이언트 페이지로 

RESPONSE 해주도록 해보겠습니다.


vo 패키지에 다음과 같은 2개의 vo 클래스를 생성합니다.











VO 클래스에 들어가는 코드를 다음과 같이 작성해주세요




ListVo.java

public class ListVo {
	private int idx;
	private String title;
	private String create_date;
	public int getIdx() {
		return idx;
	}
	public void setIdx(int idx) {
		this.idx = idx;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getCreate_date() {
		return create_date;
	}
	public void setCreate_date(String create_date) {
		this.create_date = create_date;
	}
}


ObjectVo.java

public class ObjectVo {
	private boolean success;
	private ArrayList<ListVo> list;
	private int total_count;
	public boolean isSuccess() {
		return success;
	}
	public void setSuccess(boolean success) {
		this.success = success;
	}
	public ArrayList<ListVo> getList() {
		return list;
	}
	public void setList(ArrayList<ListVo> list) {
		this.list = list;
	}
	public int getTotal_count() {
		return total_count;
	}
	public void setTotal_count(int total_count) {
		this.total_count = total_count;
	}
}



구조는 기존 Map 방식의 JSON 구조와 동일한 형식입니다.

마지막으로 Controller 부분 코드입니다.



/**
 * VO방식을 이용한 JSON API 컨트롤러
 * @return
 */
@RequestMapping(value="/getJsonByVO")
public @ResponseBody ObjectVo getJsonByVO() {
	Calendar cal = Calendar.getInstance( );
	ArrayList<ListVo> list = new ArrayList<ListVo>();
	ListVo vo = null;
	ObjectVo objectVO = new ObjectVo();
	//1번째 데이터
	vo = new ListVo();
	vo.setIdx(1);
	vo.setTitle("VO방식의 제목입니다");
	vo.setCreate_date(cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH) + 1)+"-"+cal.get(Calendar.DAY_OF_MONTH));
	list.add(vo);
	//2번째 데이터
	vo = new ListVo();
	vo.setIdx(1);
	vo.setTitle("VO방식의 제목입니다2");
	vo.setCreate_date(cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH) + 1)+"-"+cal.get(Calendar.DAY_OF_MONTH));
	list.add(vo);
		
	objectVO.setList(list);
	objectVO.setSuccess(true);
	objectVO.setTotal_count(10);
	return objectVO; 
}




위 코드 역시 임의의 데이터를 담아서 RESPONSE 결과를 

확인하기 위하여 SET을 해준것입니다.


만약 ibatis 혹은 mybatis를 사용하시게 된다면 

해당 SET 코드를 하실 필요는 없겠죠?


실행을 해보도록 하겠습니다.









VO 결과 역시 정상적으로 JSON 결과값을 출력하였습니다.


Spring3 을 이용하여 JSON API 작업을 할때 사용하시면 좋을 거 같습니다.



by 개발로짜