월간 보관물: 2014 2월

Spring MVC + jquery ajax 에서 Json 의 배열을 전송하기

Spring MVC 로 어플리케이션 백엔드를 개발하고 있는데 프론트에서 Json 객체의 배열을 전송하고 Spring 에서는 이 객체를 미리 정의된 Bean 의 List 로 받는 예제이다.

Spring 의 컨트롤러에서 해당 API와 매핑되는 함수의 모양은 다음과 같다.

@RequestMapping(value = "/{somepath}/multi", method = RequestMethod.POST)
@ResponseBody
ResponseEntity insertMulti( @PathVariable(value = "somepath") String somepath,
                            @RequestBody List<SomeBean> dataList ) {

프론트의 javascript 에서는 jquery 를 이용해서 다음과 같이 전송한다.
myJsonDataArray 는 위에서 사용하는 SomeBean 의 필드와 값을 가지고 있는 Json object 의 array 이다.

$.ajax({
       type: "POST",
       url: "somepath/multi",
       data: JSON.stringify( myJsonDataArray ),
       dataType: "json",
       contentType : 'application/json'
});

@PathVariable 에서 . 이후 값이 잘리는 경우

얼마전 Spring 을 이용해서 api 를 만들고 있었는데 Url 패턴에 매칭되어 함수로 진입을 하지만 @PathVariable 을 이용해서 그 값을 가져오면 . 이하 부분이 잘리고 들어오는 경우가 있었다.

@RequestMapping(value = "/{term}", method = RequestMethod.GET)
public ResponseEntity<String> showValuesOfTerm(@PathVariable(value = "term") String  term )

이런 식의 코드를 사용해서 term 에 대한 검색을 진행하는 로직을 담으려고 했다. 그런데 문제가 “dr.김” 이라는 term 이 들어오면 term 변수에는 “dr” 값만 들어오는 것이다.

디버깅을 해보니 spring 에서 url 을 가지고 매핑할 method 를 찾는데 그 때 RequestMapping 의 value 에 있는 url 패턴을 이용하는 방식이  /{term}.* 이런식으로 regex 매칭을 사용하다 보니 실제 term 에 매칭 되는 부분이 “dr.김” 에서 “dr” 부분만 매칭이 되어 . 이하 부분은 잘리게 되었다.

특별한 해결 방법을 찾기 보다는 url  의 path 에서 . 이 들어오는것은 자제하고 파라미터로 해당 값을 받는것으로 수정하였다.