[Spring Boot] API 개발 - response 내려주기

    반응형

    API 개발 시, response를 내려주는 방법에는 여러가지가 있습니다.

    1. 단순 text 내려주기

    @RestController
    @RequestMapping("/api-controller")
    public class ApiController {
    
        @GetMapping("/text")
        public String text(@RequestParam String account) {
            return account;
    
    }

     

    2. JSON 타입으로 내려주기

    java object로 리턴하지만 스프링 프레임워크에서는 object mapper가 자동으로 JSON으로 타입 변환을 해줍니다. JSON으로 request가 오면 object mapper를 통해서 object로 바뀌고 내가 작성한 method를 타게됩니다. method에서는 object로 반환이 되고 다시 object mapper를 통해서 JSON으로 바뀐 후, 응답이 내려갑니다.

    @RestController
    @RequestMapping("/api-controller")
    public class ApiController {
    
        @PostMapping("/json")
        public UserDTO json(@RequestBody UserDTO userDTO) {
            return userDTO;
        }
    
    }

    JSON 타입으로 응답이 내려오는 것을 확인할 수 있습니다.

     

    3. ResponseEntity로 내려주기

    마지막 방법은 응답을 내려주는 방법으로 가장 권장되는 방법인 ResponseEntity로 내려주는 방법입니다. ResponseEntity로 내려주면 응답에 대해 customizing이 가능합니다 따라서 HTTP 헤더값이나 status code 값도 지정할 수 있습니다.

    @RestController
    @RequestMapping("/api-controller")
    public class ApiController {
    
        @PutMapping("/response-entity")
        public ResponseEntity<UserDTO> responseEntity(@RequestBody UserDTO userDTO) {
            return ResponseEntity.status(HttpStatus.CREATED).body(userDTO);
        }
    
    }

    리턴값으로 ResponseEntity에 제네릭 타입을 지정한 후, status code를 HTTPStatus.CREATED로 지정하였습니다. 위와 같이 생성되었을 때의 상태 코드값인 201을 확인할 수 있습니다. 물론 body에 userDTO 객체를 넣어 JSON 타입을 리턴할 때와 response body의 내용은 동일합니다.

     

    4. 페이지를 응답으로 내려주기

    API를 만드는 서버를 작성할 수도 있지만, 실제고 page를 리턴하는 서버를 작성할 수도 있습니다. 이때는 @RestController 어노테이션이 아닌 @Controller 어노테이션을 사용합니다. @Controller 어노테이션은 리턴 값이 String일 때, 자동으로 /static 폴더의 HTML 파일을 찾아갑니다.

    @Controller
    public class PageController {
    
        @RequestMapping("/main")
        public String main() {
            return "main.html";
        }
        
    }

    @Controller
    public class PageController {
    
        @RequestMapping("/main")
        public String main() {
            return "main.html";
        }
    
        // Json을 어떻게 내려줄것인가?
        // ResponseEntity로 내려주기
    
        // ResponseBody로 내려주기
        @ResponseBody
        @GetMapping("/user")
        public UserDTO user() {
            var user = new UserDTO();
            user.setUserId(100);
            user.setUserAddress("hellomygreenworld");
            user.setUserPassword("P@ssw0rd");
            return user;
        }
    
    }
    

    @Controller에 @ResponseBody를 붙이면 @RestController 어노테이션을 사용했을 때와 같은 응답을 내려줍니다.

    반응형

    댓글