본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Spring framework

스프링 Json 매핑(415, 400오류)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 4. 29.

 

 

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으로 데이터를 주고받는 데 문제가 없을 것이다.

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글