Spring Framework

Spring) API

na_o 2022. 1. 21. 23:30
728x90

API

@ResponseBody 문자 반환

  • @ResponseBody 를 사용하면 뷰 리졸버(viewResolver)를 사용하지 않음
  • 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY 태그가 아님)
  • @Controller
    public class HelloController {
    	@GetMapping("hello-string")
    	@ResponseBody
    	public String helloString(@RequestParam("name") String name) {
        	return "hello " + name;
    	}
    }

 

 

 

@ResponseBody 객체 반환

  • 객체를 반환하면 객체가 JSON을 변환됨
  • @Controller
    public class HelloController {
    
     	@GetMapping("hello-api")
     	@ResponseBody
     	public Hello helloApi(@RequestParam("name") String name) {
     		Hello hello = new Hello();
     		hello.setName(name);
     		return hello;
     	}
     
     
     //자바 빈 표준에 따른 접근 방법
     //private 필드 접근 방법 : getter, setter 함수 이용
     	static class Hello {
     		private String name;
            
     		public String getName() {
     			return name;
     		}
            
     		public void setName(String name) {
     			this.name = name;
     		}
     	}
    }

 

 

 

@ResponseBody 사용 원리

1. 웹 브라우저에서 URL을 입력

2. 내장 톰캣 서버가 /hello-api를 찾는다고 넘김

3. Spring은 "hello-api"를 찾아내고, @ResponseBody가 있는 것을 확인하고 객체 그대로 반환

4. 객체를 보고 HttpMessageConverter가 동작해서 JSON 형식으로 바꿔서 응답

 

  • @ResponseBody를 사용
    • HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver 대신에 HttpMessageConverter가 동작
    • 기본 문자 처리 : StringHttpMessageConverter
    • 기본 객체 처리 : MappingJackson2HttpMessageConverter
    • byte 처리 등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

 

 

* 참고 : 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서

  HttpMessageConverter 가 선택된다

  - xml로 반환하게 해주는 라이브러리를 추가하면 JSON으로 반환하는 게 아닌, xml로도 반환할 수 있다

 

 

 

알게된 점 :

- @RestController 어노테이션만을 써야 객체로 반환할 수 있는 줄 알았음

- @Controller를 사용하고 함수 위에 @ResponseBody 어노테이션을 적고, 객체를 반환해도 된다