[jQuery] [Spring MVC 3] 튜토리얼; AJAX JSON POST Request/Response 수행하기; @RequestBody; @ResponseBody;

본 블로그 작성자가 직접 작성한 글로 무단 재배포를 금합니다.

* 시나리오
==========
- [클라이언트] jQuery의 AJAX POST Request를 수행시 요청 데이터로 전달할 JavaScript의 객체를
- [서버] Spring MVC 3의 컨트롤러에서 Map<String, Object> 객체로 획득하여 응답 데이터를 반환하기

* 클라이언트
============
1. 아래와 같이 서버에 전달할 JavaScript 객체를 생성
var request = {
  itemGroupDesc : '소모품'
};


2. jQuery의 AJAX POST Request를 수행
$.ajax({
  type : 'POST', // Http Request Method로 POST로 지정
  url : '/mm/ajax/listByFilter', // 서버 요청 주소
  contentType : 'application/json;charset=UTF-8', // 서버 요청시 전송할 데이터가 UTF-8 형식의 JSON 객체임을 명시
  data : JSON.stringify(request), // JavaScript 객체를 JSON 객체로 변환하여 서버 요청시 전송
  dataType : 'json', // 서버로부터 응답받을 데이터가 JSON 객체임을 명시하여 수작업 없이 응답 데이터를 JavaScript 객체로 획득
  success : function(response) { ... }, // 서버로부터 응답 데이터 도착시 로직 처리, 응답 데이터는 JavaScript 객체로 바로 사용 가능
    error : function() { ... } // 서버로부터 응답 데이터 실패시 로직 처리
});


* 서버
======
1. 클라이언트에게 전송받은 JSON 객체를 Map<String, Object> 객체로 변환할 유틸리티 클래스를 아래와 같이 작성
public class JsonUtil {
    public static HashMap<String, Object> convertJsonToObject(String json) throws JsonParseException, JsonMappingException, IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        TypeReference<HashMap<String, Object>> typeReference = new TypeReference<HashMap<String, Object>>() { };
        HashMap<String, Object> object = objectMapper.readValue(json, typeReference);
        return object;
    }
}


2. 클라이언트의 요청을 수행할 Spring MVC 3의 컨트롤러 메서드를 아래와 같이 작성
    @RequestMapping(value = "/mm/ajax/listByFilter", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody // 클라이언트에게 전송할 응답 데이터를 JSON 객체로 변환
    public Map<String, Object> listByFilter(@RequestBody String filterJSON) {
        logger.info("==================== [MM-PUR] Executing listByFilter() method");
        Map<String, Object> message = new HashMap<String, Object>();
        try {
            Map<String, Object> filter = JsonUtil.convertJsonToObject(filterJSON);
            logger.info("==================== [MM-PUR] Parameter='" + filter.toString() + "'");
            MaterialMaster mm = new MaterialMaster();
            mm.setItemGroupCd(mmService.getItemGroupCdByItemGroupDesc(filter.get("itemGroupDesc").toString()));
            List<Map<String, Object>> result = mmService.listByFilter(mm);
            message.put("result", "OK");
            message.put("message", null);
            message.put("data", result);
            logger.info("==================== [MM-PUR] Return='" + message.toString() + "'");
            return message;
        } catch (Exception ex) {
            message.put("result", "ERROR");
            message.put("message", ex.getMessage());
            message.put("data", null);
            logger.info("==================== [MM-PUR] Return='" + message.toString() + "'");
            return message;
        }
    }



신고