귀찮지만 만들어보자

Spring 3.1 @RequestBody 유의점 본문

카테고리 없음

Spring 3.1 @RequestBody 유의점

타우렌주술사 2016. 10. 3. 20:19

레거시 프로젝트를 다루는 일이 많아지면서 전에 직면하지 못했던 문제들을 해결해야할 경우가 종종 생기게 됐다


당연하게 사용해왔던 @RequestBody 역시나 마찬가지 -_-..


Spring 3.0 -> 3.1로 버전이 올라가면서 deprecated 됐던 설정들을 교체해주고나서 제대로 동작하는가 했더니


이번에는 Object가 아닌 List형태를 RequestBody 어노테이션으로 받아오면


java.util.LinkedHashMap cannot be cast to object


이런식으로 에러가 발생했는데..


나는 분명히 List형태의 데이터를 받아왔지만 LinkedHashMap으로 되어있어서 이상하다는 생각에 구글링을 해보니


일단 4.0이후의 버전에서는 고쳐진 문제라고 한다..


그러나 3.x 버전의 스프링에서 이 문제를 해결하려면


jackson 을 사용할경우


@RequestMapping(value = "/ajax/admin/documentTypeList.do", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity changeDocumentStatus(@RequestBody List<DocumentTypeVO> list) {

ObjectMapper mapper = new ObjectMapper();
List<DocumentTypeVO> al = mapper.convertValue(list, new TypeReference<List<DocumentTypeVO>>() {});

String res = masterService.documentUseYNChange(al);

if ("success".equals(res)) {
return new ResponseEntity(res, HttpStatus.OK);
} else {
return new ResponseEntity(res, HttpStatus.BAD_REQUEST);
}
}


이런식으로 한번 컨버팅해줘야 한다 -_-..