티스토리 뷰

Ajax

Ajax - @ResponseBody & @RequestBody

Dev_YooJin 2018. 1. 3. 17:38

Ajax  -  @ResponseBody & @RequestBody

먼저 최근 개발하고 있는 방식은 대부분이 프론트엔드와 백엔드를 분리하여 개발을 하고 있다. 프론트엔드의 AJAX요청은 대부분 JSON으로 되어 있고, 이에 맞춰 백엔드에서도 JSON 형태로 응답을 해주는 방식을 취하게 된다. 스프링에서는 이와 관련된 @MVC 관련 애노테이션과 설정을 통해 기능을 제공하고 있다.


@RequestBody

이 어노테이션이 붙은 파라미터에는 HTTP 요청의 본문 body 부분이 그대로 전달된다. RequestMappingHandlerAdapter에는 HttpMessageConverter 타입의 메시지 변환기(message converter)가 여러 개 등록되어 있다. @RequestBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어 타입과 파라미터의 타입을 먼저 확인한다. (dispatcher-servlet.xml 에서 확인) 메시지 변환기 중에서 해당 미디어 타입과 파라미터 타입을 처리할 수 있다면, HTTP 요청의 본문 부분을 통째로 변환해서 지정된 메소드 파라미터로 전달해준다.

쉽게 말하자면 @RequestBody 어노테이션을 이용하면 HTTP 요청 Body를 자바 객체로 전달받을 수 있다.

@RequestBody 어노테이션은 요청에서 Body부분을 살펴 요청된 데이터를 추출하여 파라미터로 변환해주는데, ‘GET’ 메소드 요청의 경우에는 HTTP Body에 요청이 전달되는 것이 아니라, URL의 파라미터로 전달 (ex: http://localhost:8080/test?id=admin&name=hanq…) 형식으로 전달되기 때문에 @RequestBody로 받으려고 해도 서로 다른 곳을 보며 데이터가 없다는 결과를 던질 수 밖에 없다.


@ResponseBody

@ResponseBody는 @RequestBody와 비슷한 방식으로 동작한다. @ResponseBody가 메서드 레벨에서 부여되면 메서드가 리턴하는 오브젝트는 뷰를 통해 결과를 만들어내는 모델로 사용하는 대신, 메시지 컨버터를 통해 바로 HTTP 응답의 메시지 본문으로 변환된다.

간단히 이야기 하자면, 요청한 형태에 맞춰서 메시지 변환기를 통해 결과값을 반환한다. @ResponseBody는 @RequestBody가 선택한 형식으로 결과값을 변환하여 반환한다고 보면 된다. 또한 @ResponseBody을 이용하면 자바 객체를 HTTP 응답 body로 전송할 수 있다.


SOURCE


  • POM.XML 설정 


        <dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.9.3</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.9.3</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.3</version>
		</dependency>


  • dispatcher-servlet.xml 설정 

<bean
	class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
	<property name="webBindingInitializer">
		$ltbean class="egovframework.example.cmmn.web.EgovBindingInitializer" />
	</property>
	<property name="messageConverters">
		<list>
			<bean class="org.springframework.http.converter.StringHttpMessageConverter">
				<property name="supportedMediaTypes">
					<list$gt
						<value>text/html;charset=UTF-8</value>
						<value>application/json;charset=UTF-8</value>
					</list>
				</property>
			</bean>
			<bean
		   class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
		</list>
	</property>
</bean>

- RequestMappingHandlerAdapter에 등록될 수 있는 디폴트 메세지 컨버터 종류


  • JSP

         var data  = {name    : "박유진", 
                      userId  : "유징징" 
         };

             $.ajax({
			        type		: "POST",
			        url 		: "reqBodyPost.do",
			        data		:  JSON.stringify(data), 
			        contentType : "application/json",
			        success 	: function(data) {
			        	console.log(data);
			        },
			        error		: function(error) {
			        	console.log(error);
			        }
			    });


  • JAVA

    @ResponseBody
	@RequestMapping(value = "/reqBodyPost", method = RequestMethod.POST)
	public String testJson(@RequestBody SelectBoxVO selectBoxVO) throws Exception {
		
		logger.info(selectBoxVO.getName());   // 박유진
		logger.info(selectBoxVO.getUserId()); // 유징징
		
		return selectBoxVO.getName();
	}


'Ajax' 카테고리의 다른 글

Ajax & JSON - 서버에서 화면으로 화면에서 서버로 (수정중)  (0) 2018.01.06
Ajax 란?  (0) 2017.12.31
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함