Spring Web MVC로 RESTful Web Service 개발하기

yc999·2021년 2월 2일
0

java

목록 보기
6/6
post-thumbnail

REST란?

REpresentional State Transfer은 애플리케이션이 URI를 통해 유일하게 식별하는 자원을 정의하는 아키텍쳐 스타일이다. REST 아키텍쳐 스타일을 따르는 웹 서비스를 RESTful Web Service라고 한다.

Spring MVC에서 HTTP Request에 대한 Response로 View가 전달되었다면, RESTful Web Service에서는 일반적으로 json format의 데이터가 전송된다.

@Controller, @RequetMapping, @RequetParam, @PathVariable, @ResponseBody, @RequestBody annotation을 사용하여 RESTful web service를 정의할 수 있다.

@Controller + @RequestMapping + ResponseEntity를 사용하여 REST API 정의

@Controller
@RequestMapping(path = "/fixed-deposits")
public class FixedDepositController {
...
    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<List<FixedDepositDetails>> getFixedDepositList() {
        ...
        return new ResponseEntity<List<FixedDepositDetails>>(
            fixedDepositService.getFixedDeposits(), HttpStatus.OK
        );
    }

@RequestMapping annotation이 붙어 Request를 처리하는 method의 return type을 ResponseEntity<List<FixedDepositDetails>> 라고 정의하여 List<FixedDepositDetails> collection을 ResponseBody에 담아 전송할 것이라고 선언한다.

@ResponseBody + @ResponseStatus를 사용하여 REST API 정의

하지만 이 방법은 return 문에서 직접 ResponseEntity를 직접 생성해야 하는 번거로움이 있고, method의 return type도 길어진다. @ResponseBody + @ResponseStatus를 사용하여 method를 조금 더 깔끔하게 작성할 수 있다.

@Controller
@RequestMapping(path = "/fixed-deposits")
public class FixedDepositController {
...
    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    @ResponseStatus(code = HttpStatus.OK)
    public List<FixedDepositDetails> getFixedDepositList() {
        ...
        return fixedDepositService.getFixedDeposits()
    }

ExceptionHandler 애너테이션을 사용해 예외 처리

요청을 처리하다가 예외가 발생하면 다른 Status code와 에러 메세지를 가지고 return을 해야할텐데
아래와 같이 @ExceptionHandler를 사용하여 처리할 수 있다.

...
public class FixedDepositController {
...
    @ExceptionHandler(ValidationException.class)
    @ResponseBody
    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    public String handleException(Exception ex) {
        ...
        return ex.getMessage();
    }
profile
꼬물꼬물 앞으로 가는 중

0개의 댓글