본문 바로가기

프로그램

[SPRING]SPRING에서 JSON 객체를 파라메터로 넘겼을 경우 처리

반응형

SPRING에서 JSON 객체를 파라메터로 넘겼을 경우 처리


SPRING에서 PARAMETER로 JSON을 던져서 처리하는 것을 연습삼아 하게 되었다.


삽질의 연속이었다.-_-


JSP파일에서는 JQUERY 의 $.ajax를 사용하였다.


data 속성에 담아서 보냈는데 data에 담을 경우 알아서 queryString으로 파싱을 하게 된다.

(queryString : type=sfa&name=3234&id=1324142 형식)


그래서 JSON.stringify 함수를 통해서 JSON문자열로 만든 후 이를 data에 담아서 보냈다.


그리고 Spring에 JSON으로 보낸다는 것을 인식시키기 위해 contentType을 application/json;charset=UTF-8 로 보내야 한다.

그렇지 않을 경우 415 415 unsupported media type 에러를 받아볼 수 있을 것이다.(제길-_-)


소스


var jsonStr = JSON.stringify(pObj);

console.log("jsonStr : " + jsonStr);


$.ajax({

url : '/app/adm/menu/modify'

        , method : "post"

, dataType : 'json'

, data : jsonStr

, processData : true /*querySTring make false*/

, contentType : "application/json; charset=UTF-8"

, success : function(data, stat, xhr) {

alert("success");

}

   , error : function(xhr, stat, err) {

    alert("error");

    console.log(err);

   }

});



spring셋팅에서 @annoatation-drriven 을 사용하였기에 MessageConvert에 자동으로 JacksonJson 이 추가된다고 알고 있었다.

근데 이것도 pom.xml 에 jacksonJson mapper lib가 추가되었을 경우 해당한다.

(jackson json lib 버젼의 경우 1.9.x 도 되는듯 하나 그냥 최신버젼으로 하였다.)

(스프링 doc에 3.1.2 부터 가능하다고 하는 이야기도 있다. 안될 경우 spring버젼을 3.1.2 이상으로 하자.)


pom.xml

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

            <version>2.4.4</version>

        </dependency>



spring 의 controller 부분에서는 paremeter 로 json을 받기 위해 controller의 arg 부분에 @requestBody 를 추가하였다.

또한 return 을 json으로 하기 위해 @responseBody를 추가하였다.


controller의 argument, return 값이 대한 설명 참고 url

http://springsource.tistory.com/13



또한 json 으로 넘겨받은 것을 jackson json lib 가 자동으로 convert 시 리턴값을 List<LinkedHashMap> 형태로 반환한다고 한다.

(나같은 경우 json 기준 [{}, {}, {}] 구조임)


여기서도 domain 객체로 받는 것으로 처리해놨다가 엄청 삽질하고 구글링 통해 포기했다.-ㅅ-;;


controller 소스

@RequestMapping("modify")

@ResponseBody

public String modify(@RequestBody List<Map<String, Object>> list) {

logger.debug("modify");

logger.debug("param : " + list);

ArrayList<Menu> menuList = new ArrayList<Menu>();

for(Map<String, Object> m : list) {

logger.debug("menu : " + m);

Menu menu = new Menu();

menu.setSeq(Long.parseLong(m.get("seq").toString()));

menu.setMenuName(m.get("menuName").toString());

menu.setMenuUrl(m.get("menuUrl").toString());

menu.setpSeq(Long.parseLong(m.get("pSeq").toString()));

menuList.add(menu);

}

menuService.insertMenu(menuList);

return "{}";

}



일단 이렇게 해서 json객체를 spring에서 받는 부분을 처리하였다.



json ajax 처리 시 오류난 이유

http://www.okjsp.net/seq/218107

 

@requestBody 관련 참고자료

http://java.ihoney.pe.kr/283

http://www.leveluplunch.com/java/tutorials/014-post-json-to-spring-rest-webservice/

http://springsource.tistory.com/13

http://stackoverflow.com/questions/6019562/parsing-json-in-spring-mvc-using-jackson-json