@GetMapping("hello-string")
@ResponseBody // 중요: Body에 내용(name)을 직접 추가
public String helloString(@RequestParam("name") String name) {
return "hello " + name; // 직접 추가
}
@ResponseBody를 사용하면 뷰 리졸버(viewResolver)를 사용하지 않음
대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)
실행
http://localhost:8080/hello-string?name=spring!!!
@GetMapping("hello-mvc") vs. @GetMapping("hello-string")
GetMapping("hello-mvc")
hello-template을 통해 내용(name)이 추가됨
view(hello-template)를 거침
GetMapping("hello-string")
Body에 내용(name)을 직접 추가
@ResponseBody 필요
view를 거치지 않음
많이 사용하지 않음
페이지 소스 비교 (좌)@GetMapping("hello-MVC") (우)@GetMapping("hello-string")
@ResponseBody 객체 반환
API 방식
@GetMapping("hello-api") 부분 추가
// API 방식
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) { // 아래 static class Hello 사용
Hello hello = new Hello(); // cmd+shift+enter 단축키 사용: 자동 완성(;)
hello.setName(name);
return hello; // 객체 return (문자x)
}
static class Hello {
private String name;
// getter setter 만들기 단축키: cmd + n
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨
(참고) 단축키
cmd + shift + enter : 자동 완성
cmd + n : getter setter 만들기
(참고) getter, setter
private 변수는 외부에서 접근 불가, 접근하기 위해 getter, setter 이용
property 접근 방식
실행
http://localhost:8080/hello-api?name=spring!!!페이지 소스 보기
JSON 방식
key-value로 이루어진 구조
위에서 key: name, value: spring!!!
과거에는 XML 방식(여는 태그 + 닫는 태그)도 많이 쓰였지만, 최근에는 JSON 방식 많이 사용
spring 역시 JSON 방식이 default
JSON, XML 정리
@ResponseBody 사용 원리
HTTP의 BODY에 문자 내용을 직접 반환
viewResolver 대신에 HttpMessageConverter가 동작
기본 문자 처리: StringHttpMessageConverter
기본 객체 처리: MappingJackson2HttpMessageConverter
byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
(참고) 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다.
댓글 영역