본문 바로가기

개발중/Spring

@RestController, ResponseEntity, @PathVariable

728x90
반응형

 

@RestController

REST 방식에서 가장 먼저 기억해야 하는 점은 서버에서 전송하는 것이 순수한 데이터라는 점 입니다.
기존의 Controller 에서 Model 에 데이터를 담아서 JSP 등과 같은 View 로 전달하는 것은 아니므로  기존의 Controller 와는 조금 다르게 동작합니다.

스프링4 에서는 @Controller 외에 @RestController 라는 어노테이션을 추가해서 

해당 Controller 에서의 모든 메서드의 리턴 타입을 기존과 다르게 처리한다는 것을 명시합니다.
@RestController 이전에는 @Controller 와 메서드 선언부에 @ResponseBody 를 이용해서 동일한 결과를 만들 수 있었습니다.

@RestController 는 메서드의 리턴타입으로 사용자가 정의한 클래스 타입을 사용할 수 있고, 이를 JSON 이나 XML 으로 자동으로 처리할 수가 있습니다.

 


 

ResponseEntity 타입

REST 방식으로 호출하는 경우는 화면 자체가 아니라 데이터 자체를 전송하는 방식으로 처리되기 때문에
데이터를 요청한 쪽에서는 정상적인 데이터인지 비정상적인 데이터인지를 구분할 수 있는 확실한 방법을 제공해합니다.

ResponseEntity 는 데이터와 함께 HTTP 의 헤더의 상태 메세지 등을 같이 전달하는 용도로 사용합니다.
HTTP 의 상태 코드와 에러 메세지 등을 함께 전달할 수 있기 떄문에 받는 입장에서는 확실하게 결과를 알 수 있습니다.

502
ResponseEntity<BinsooVO>.status(HttpStatus.BAD_GATEWAY).body(vo)

200
ResponseEntity<BinsooVO>.status(HttpStatus.OK).body(vo)

 


 

@PathVariable

REST 방식에서는 URL 내에 최대한 많은 정보를 담으려고 노력합니다.
예전에는 ? 뒤에 추가되는 쿼리 스트링이라는 형태로 파라메터를 이용해서 전달되던 데이터들이 

REST 방식에서는 경로의 일부로 차용되는 경우가 많습니다.

스프링 MVC 패턴에서는 @PathVariable 어노테이션을 이용해서 URL 상에 경로를 일부로 데이터로 사용할 수 있습니다.

http://localhost:8080/binsoo/sample/{seq}
http://localhost:8080/binsoo/sample/{seq}/page/{no}


위의 URL 에서 '{}' 으로 처리된 부분은 컨트롤러의 메서드에서 @PathVariable를 이용하여 변수로 처리가 가능합니다.

@GetMapping("/binsoo/sample/{seq}")
@PathVariable("seq") int seq

 


 



728x90
반응형