Node.js나 php같은경우에..json 매핑하는 방법이 그리 어렵지 않다.
간단한 메소드 호출정도로 끝나는데..
우리의 스프링님께서는 워낙 깐깐하셔서...요청하는(Request) 내용의 헤더와 바디가 모두 완벽해야 요청되는 데이터를 매핑해준다.
즉, 요청이 완벽하게 들어오지 않으면 조금이라도 다르게 들어 온 다면 에러를 내거나 빈 값을 받는 모습을 보이게 된다.
그러다 보니 415오류 400오류같은 나쁜(?)요청이라고 자꾸만 리턴받게되고..
구글링해서 여러방법을 써도 안되는 경우에는 초기설정, 요청하는 방법에 대해서 잘 살펴보아야 한다.
1.먼저 서블릿 설정을 확인하여 본다.
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
위 내용처럼 메시지 컨버팅 내용을 주입하지 않으면 요청 또는 응답시에 매핑하지 못하거나 한글이 깨지는 현상을 확인 할 수 있다.(스프링 3.0이상 설정방법)
2.다음으로 확인하는 부분은 값을 받는 부분이다.
@RequestMapping(value = "/json")
@ResponseBody
public HashMap<Object, Object> json(@RequestBody HashMap<Object, Object> param){
System.out.println(param); //요청값
HashMap<Object, Object> result = new HashMap<Object, Object>(); //리턴값
result.put("RESULT","성공!");
return result;
}
위 코드처럼 파라미터를 받을 때 간단하게 @RequestBody 에노테이션을 활용하면 요청 된 Body값에 대해서 스프링이 스스로 매핑을 해주게 된다.
따라서 System.out.println 부분에서 요청한 json 형태의값이 나와야 하며,
@ResponseBody 에노테이션에 의해서 결과 값이 HashMap형태로 리턴되기 때문에 사용자는 key, value 형식인 json 형식으로 결과를 받을 수 있다.
물론 상위 인터페이스인 Map으로도 가능하며 사용자가 지정한 vo 형태도 가능하다.
3.마지막으로 확인해야 될 부분은 사용자의 요청부분이다.
사용자가 json으로 스프링 구조의 서버에 요청할 때는 헤더와 바디가 완벽(?)해야 한다.
Content-Type은 application/json 형식으로 헤더가 설정이 되어야 한다. 헤더에 타입이 application/json형식으로 되어있으면 스프링은 들어온 요청값을 json으로 인식해서 콤마와 콜론을 토대로 key, value 형식으로 알아서 나누어주게 된다.
여기서 조금 당황스럽지만, 키와 값을 구분하는 콜론(:)은 붙어있어야 한다.
- 예 : "KEY:VALUE"는 올바른 요청이지만 "KEY : VALUE"처럼 띄어쓰기가 1개이상이면 에러를 뿜뿜한다...
올바르지 못한 요청이라고 하면서....
위 3가지 설정을 완벽하게 한다면 스프링 구조의 서버에서는 Json으로 데이터를 주고받는 데 문제가 없을 것이다.
'Spring framework' 카테고리의 다른 글
페이징 처리, 페이징 클래스 (0) | 2019.04.29 |
---|---|
Mybatis 오라클 clob 매핑 (0) | 2019.04.29 |
Spring, ResponseBody 오류, 406에러 (0) | 2019.04.29 |
전자정부 프레임워크(Spring) 파일 다운로드 (0) | 2019.04.29 |
스프링 resources로 프로퍼티 읽기 (0) | 2019.04.29 |
댓글