기존 HelloController.java 파일에 다음과 같이 추가해준다.
hello-spring/src/main/java/hello.hellospringg/controller/HelloController
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
*@ResponseBody : http의 Body에 해당 데이터(리턴값)를 직접 반환한다는 의미
윗 코드 작성시 view역할 없이 입력했던 문자열이 그대로 보여진다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
파라미터로 넘어온 name값을 넣고 hello라는 객체를 반환한다.
static 작성시 HelloController클래스 안에서 Hello클래스를 또 쓸 수 있다.
변수 name에 대한 *getter/setter를 만들어 줌으로서 해당 값을 꺼내고 넣어줄 수 있다.
*getter/setter : 라이브러리에서 접근할 수 있는 자바빈 표준방식 or Property 접근방식
프로그램 실행 후 브라우저에 http://localhost:8080/hello-api?name=spring 를 입력하면 위와 같이 *JSON방식으로 표현된다.
*JSON(JavaScript Object Notation) : 경량 데이터 기술언어로서 오브젝트 표기법을 바탕으로, 당초 XML이 사용되던 Ajax에서 변화하게 되었다. (출처: 그림으로 배우는 Http Network Basic)
웹 브라우저에서 local:8080/hello-api를 실행함.
내장 톰켓을 통해 helloController.java로 보냄.
@ResponseBody를 만나면 hello객체를 JSON방식으로 웹 브라우저에 반환함.
만약 리턴값이 객체면 JsonConverter가, 문자면 StringConverter가 동작됨. (HttpMessageConverter)
HTTP의 BODY에 문자 내용을 직접 반환
'viewResolver' 대신에 'HttpMessageConverter'가 동작
기본 문자처리: 'StringHttpMessageConverter'
기본 객체처리: 'MappingJacson2HttpMessageConverter'
byte처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
*참고 : 클라이언트의 HTTP Accept 헤어와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HpptMessageConverter'가 선택된다.
정적컨텐츠 : 파일을 그대로 반환함.
MVC와 템플릿엔진 : 템플릿을 model/view/controller로 쪼개고, view(html)를 템플릿엔진으로 필요한 만큼 변환(렌더링)한 다음, 변환된 html을 클라이언트에 반환함.
API : 주로 객체를 반환하는데, HttpMessageConverter를 통해 JSON방식으로 변환한 다음, 그 데이터를 그대로 HTTP Response에 넣어 반환함.