spring ajax에서 보낸 list json을 java에서 받기
리스트를 전달하기 위해 검색을 많이 해봣지만
대부분 리스트타입을 리스트 타입으로 넘기거나, json을 json으로 넘기는 경우가 많았다.
내 경우 리스트와 함게 string타입의 다른 파라미터도 같이 넘겨 db를 타는 경우가 많기 때문에
파라미터타입을 map으로 주로 사용을 한다.
아래의 경우 파라미터 타입을 HashMap으로 사용하는 경우이다.
[script]
리스트를 json타입으로 변환해준 후 ajax를 통해 controller로 전달
var dataParam = {list:JSON.stringify($scope.lists), param1:'param1', param2:'param2'};
$.ajax({
type : 'POST',
dataType : 'json',
data: dataParam,
url : url,
success : function(returnData) {
},error:function(e){
};
}
});
key : list, value = json list
key : param1 , value ="param1"
key : param2, value ="param2"
와 같은 map타입의 파라미터 이다.
[java]
//import com.fasterxml.jackson.databind.ObjectMapper;
public Map<String, Object> jsonList(@RequestParam Map<String, Object> parameters){
String json = parameters.get("list").toString();
ObjectMapper mapper = new ObjectMapper();
List<Map<String, Object>> list = mapper.readValue(json, new TypeReference<ArrayList<Map<String, Object>>>(){});
return null;
}
HashMap타입의 parameter에서 key가 list인 값을 string형태로 가져온다.
여기서 String 형태의 json값을 arrayList로 풀어가는 과정이다.
결과적으로 List<> list 에는 json을 arrayList로 변환한 값이 들어가 있다.
이 리스트를 DTO로 받고싶은 경우
List<DTO> list = mapper.readValue(json, new TypeReference<ArrayList<DTO>>(){});
로 바꾸어 사용하면 된다.
-------- 2018-09-12 내용추가 ----------------------------------------
위와 같은 내용을 알려주던 중 질문 하나를 받았다.
Map의 Object타입을 이용하는 경우 xml에서 int와 string을 구분할 수 있을까?
xml에서 타입 지정이 가능하다.
직접 해본 바로는
int타입은 #{key, jdbcType=INTEGER} 로 지정해주면 해당 값이 int형으로 넘어간다.
String타입은 같은 방법으로 지정해도 되지만 따로 지정하지 않아도 제대로 값이 들어갔다.