티스토리 뷰

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

* 시나리오
==========
- [클라이언트] 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;
        }
    }



댓글
  • 프로필사진 아라리요 컨트롤러 메소드에서 MaterialMaster는 뭔가요?
    소스 따라해보려고 했는데 저거에서 cannot be resolved to a type 뜨네요...
    2013.06.24 12:26
  • 프로필사진 BlogIcon 지단로보트 블로그 주인장입니다.^^ MaterialMaster는 단순한 도메인 오브젝트입니다. mmService 또한 특정 서비스 오브젝트로 단지 요청에 대한 응답 데이터를 생성하는 용도이니 신경쓰지 마시고 Spring MVC 3로 AJAX 응답을 저런 식으로 처리한다 정도만 보시면 될 것 같습니다. 2013.06.24 22:32 신고
  • 프로필사진 아라리요 filter.get("itemGroupDesc") 이 부분에 좀 더 복잡한 구조의 JSON 의 경우는 어케 되는건가요? 2013.10.01 11:23
댓글쓰기 폼