sin prisa pero sin pausa

[Spring] @ResponseBody 스프링 컨트롤러 ajax 응답받기 본문

더 알아보고 싶은데?

[Spring] @ResponseBody 스프링 컨트롤러 ajax 응답받기

EstherDmt 2021. 7. 21. 22:59
반응형

스프링 컨트롤러에서 ajax에 대한 응답을 반환하려면 어떻게 해야할까?

 

스프링 @Controller는 forward와 redirect만 가능하기 때문에 

화면의 일부만 바뀌는 ajax와 같은 비동기 통신이라면 다른 방법으로 반환을 해줘야 한다. 

 

여기서 쓸 수 있는 어노테이션이 바로  @ResponseBody 

 

출처: https://zetcode.com/springboot/responsebody/

더보기

[해석]

@ResponseBody는 웹 reponse body로 값을 반환하는 주석이다.

뷰 이름으로 해석되지 않으며 HTTP 메시지 변환기를 사용하여

요청 HTTP 헤더의 콘텐츠 유형을 기반으로 반환 값을 HTTP 응답 본문으로 변환한다. 

 

=> ViewResolver가 결합되어 response header에 담기는 view 주소가 아닌

반환값 그대로의 값을 response body에 담아서 보내준다는 것이다.

 

[예시]

1. Controller 코드

@ResponseBody
	@RequestMapping(value="idDupCheck", method=RequestMethod.POST)
	public int signUp(Member member) {
		
		int result = service.signUp(member);
		
		return result;
	}

2. ajax 코드

$.ajax({
            url : "signUp",  
            data : {"member" : member,},
            type : "post", 
            success : function(result){
                if(result > 0) { // 회원가입 성공

                } else { // 아이디가 중복되지 않는 경우

                }
            },
            error: function(e){ // 통신 실패 시 

            } 
        })
더보기

=> 밑의 ajax 코드는 회원가입의 결과값인 int result(1이나 0)을 결과값으로 받아야 하기 때문에 

signUp과 매핑된 Controller에서는  @ResponseBody 를 이용하여 결과값을 그대로 반환해줘야 한다.

반응형