REST는 "Representational State Transfer"의 약자이다.
하나의 URI가 하나의 고유한 리소스를 대표하도록 하는 설계 개념과 전송 방식을 결합하여 원하는 작업을 지정한다는 뜻이다.
REST 방식에서 가장 먼저 기억해야 하는 점은 서버에서 전송하는 것이 순수한 데이터라는 점이다. 기존의 Controller에서 Model에 데이터를 담아서 JSP와 같은 뷰로 전달하는 방식이 아니므로, 기존의 Controller와는 조금 다르게 동작한다. @Controller에 @ResponseBody가 추가된거라고 보면 된다. 기존과 다른점은 메서드의 리턴타입으로 사용자가 정의한 클래스 타입을 사용할 수 있고, 이를 JSON이나 XML로 자동으로 처리할 수 있다.
주로 많이 사용하는 형태는 일반 문자열이나 JSON, XML등이 있다.
기존의 @Controller는 문자열을 반환하는 경우에는 JSP파일의 이름으로 처리하지만, @RestController의 경우에는 순수한 데이터가 된다.
(produces속성은 해당 형태의 유형으로 응답을 한다는 것을 의미한다)
개발자 도구를 보면 produces의 속성값으로 지정된 'text/plain'결과가 나오는 것을 확인할 수 있다.
객체를 생산하기 위해 SampleVO 클래스를 우선 만들어보자.
비어있는 생성자를 만들기 위한 @NoArgsConstructor와 모든 속성을 사용하는 생성자를 위한 @AllArgsConstructor 어노테이션을 사용했다.
컨트롤러 설계는 아래와 같이 한다.
.json을 추가해 호출하게 되면 기존과 달리 JSON 타입의 데이터가 전달되는 것을 확인할 수 있다.
경우에 따라서는 여러 데이터를 한 번에 전송하기 위해서 배열이나 리스트, 맵 타입의 객체들을 전송하는 경우도 있다.
getList()는 내부적으로 1부터 10미만까지의 루프를 처리하면서 SampleVO 객체를 만들어서 List로 만들어 낸다.
Map을 이용하는 경우에는 '키(key)'에 속하는 데이터가 XML로 변환되는 경우에 태그의 이름이 되기 때문에 문자열을 지정한다.