평범한 연구소

[Spring] 스프링에서 AJAX 사용하기 (@ResponseBody) 본문

Spring Framework

[Spring] 스프링에서 AJAX 사용하기 (@ResponseBody)

soyeonisgood 2022. 11. 17. 19:27

@ResponseBody

 - 반환 객체를 HTTP 응답으로 전송하는 어노테이션.

  • 메소드에서 반환하는 자바 객체를 HTTP 응답 몸체로 변환한다.
  • 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할. (AJAX-JSON형식에서 필수!)

 - HttpMessageConverter를 통해 HTTP 응답 스트림으로 변환.

 - @RestController 에는 기본적으로 @ResponseBody 가 적용되서 메소드 레벨에서 추가하지 않아도 된다.

 - 스프링 4.0부터는 MappingJackson2HttpMessageConverter를 이용하여 자바 객체를 JSON으로 변환하거나 JSON을 자바 객체로 변환한다. 

 - pom.xml에 jackson 의존성을 추가한다.

<properties>
	...
	<org.json-version>20220924</org.json-version>
</properties>

<dependencies>
	...
	<!-- jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson-version}</version>
        </dependency>

		<!-- JSON -->
		<dependency>
		    <groupId>org.json</groupId>
		    <artifactId>json</artifactId>
		    <version>${org.json-version}</version>
		</dependency>
 </dependencies>

 

@ResponseBody 활용 예제

 - json 형식(dataType)으로 AJAX

function userIdCheck() {

	...
    let url = "${pageContext.request.contextPath}/member/userIdCheck";
	let query = "userId=" + userId;
	$.ajax({
		type:"POST"
		,url:url
		,data:query
		,dataType:"json"
		,success:function(data) {
			let passed = data.passed;

			if(passed === "true") {
				let str = "<span style='color:blue; font-weight: bold;'>" + userId + "</span> 아이디는 사용가능 합니다.";
				$(".userId-box").find(".help-block").html(str);
				$("#userIdValid").val("true");
			} else {
				let str = "<span style='color:red; font-weight: bold;'>" + userId + "</span> 아이디는 사용할수 없습니다.";
				$(".userId-box").find(".help-block").html(str);
				$("#userId").val("");
				$("#userIdValid").val("false");
				$("#userId").focus();
			}
		}
	});
}

 

 

 - Map → JSON으로 변환하여 반환

	@RequestMapping(value = "userIdCheck", method = RequestMethod.POST)
	@ResponseBody
	public Map<String, Object> idCheck(@RequestParam String userId) throws Exception {

		String p = "true";
		Member dto = service.readMember(userId);
		if (dto != null) {
			p = "false";
		}

		Map<String, Object> model = new HashMap<>();
		model.put("passed", p);
		return model;
	}