필요한 데이터만 전송한다.
@RestController
REST방식에서 가장 먼저 기억해야 하는 점은 서버에서 전송하는 것이 순수한 데이터라는 점이다.
기본의 컨트롤러에서 Model에 데이터를 담아서 JSP 등과 같은 뷰로 전달하는 방식이 아니므로 기존의 Controller와는 조금 다르게 동작한다.
@RestController 이전에는 @Controller와 메서드 선언부에 @ResponseBody를 이용해서 동일한 결과를 만들 수 있다.
단순 문자열 반환
@RestController는 jsp와 달리 순수한 데이터를 반환하는 형태이므로 다양한 포맷의 데이터를 전송할 수 있다.
주로 일반 문자열이나 JSON, XML등을 사용한다.
객체의 반환
객체를 반환하는 작업은 JSON이나 XML을 이용한다.
ResponseEntity 타입
REST 방식으로 호출하는 경우는 화면 자체가 아니라 데이터 자체를 전송하는 방식으로 처리되기 때문에 데이터를 요청한 쪽에서는 정상적인 데이터인지 비정상적인 데이터인지를 구분할 수 있는 확실한 방법을 제공해야만 한다.
ResponseEntity는 데이터와 함께 HTTP 헤더의 상태 메시지 등을 같이 전달하는 요도로 사용한다.
height가 150미만일 경우 502상태 전송.
이상이면 200상태 전송.
파라미터
@PathVariable : URL경로의 일부를 파라미터로 사용할 때 이용.
@RequestBody : JSON 데이터를 원하는 타입의 객체로 변환해야 하는 경우에 주로 사용.
@PathVariable
REST 방식에서는 URL 내에 최대한 많은 정보를 담으려고 노력한다.
예전에는 '?'뒤에 추가되는 쿼리 스트링이라는 형태로 파라미터를 이용해서 전달되던 데이터들이 REST방식에서는 경로의 일부로 차용되는 경우가 많다.
http://localhost:8080/sample/{sno}
http://localhost:8080/sample/{sno}/page/{pno}
{ } 로 처리된 부분은 컨트롤러의 메서드에서 변수로 처리가 가능하다.
@RequestBody
전달된 요청(request)의 내용(body)을 이용해서 해당 파라미터의 타입으로 변환을 요구한다.
대부분의 경우에는 json 데이터를 서버에 보내서 원하는 타입의 객체로 변환하는 용도로 사용되지만, 경우에 따라서는 원하는 포맷의 데이터를 보내고, 이를 해석해서 원하는 타입으로 사용하기도 한다.
REST 방식의 테스트
주로 REST 방식의 데이터를 전송하는 툴을 이용하거나, JUnit과 spring-test를 이용해서 테스트하는 방식을 고려할 수 있다.
JUnit
JSON으로 전달되는 데이터를 받아서 Ticket 타입으로 변환한다.
이를 위해서는 해당 데이터가 json이라는 것을 명시해줘야 한다.
MockMvc는 contentType()을 이용해서 전달하는 데이터가 무엇인지 알려줄 수 있다.
Gson()은 자바의 객체를 JSON 문자열로 변환하기 위해 사용한다.
다양한 전송방식
'Web > Spring' 카테고리의 다른 글
스프링 트랜잭션 (0) | 2020.06.09 |
---|---|
AOP (0) | 2020.06.08 |
스프링 (Spring) (0) | 2020.05.23 |