Spring
Spring Boot
Request & Response

Response Code

Request

@Slf4j
@RestController
@RequestMapping("/api/v1")
public class ResponseApiController {
    // http://localhost:8080/api/v1
    // @GetMapping("") 과 동일한 표현
    // Request 매핑은 method를 지정안해주면 post, get, put, delete 모두 받음
    // 그래서 반드시 method를 지정해줘야 하며, path에 method의 주소도 지정할 수 있음
    @RequestMapping(path = "", method = RequestMethod.GET)
    public UserRequest user() {
        var user = new UserRequest();
        user.setUserName("홍길동");
        user.setAge(10);
        user.setUserEmail("rookedsysc36@gmail.com");
        return user;
    }
}

Response Entity

Response Entity를 사용하면 status code를 지정할 수 있다.

@Slf4j
@RestController
@RequestMapping("/api/v1")
public class ResponseApiController {
    @RequestMapping(path = "", method = RequestMethod.GET)
    // return type 변경
    public ResponseEntity user() {
        var user = new UserRequest();
        user.setUserName("홍길동");
        user.setAge(10);
        user.setUserEmail("rookedsysc36@gmail.com");
 
        log.info("user : {}", user); 
        // status code : 기본 200 ok
        // Response Entity를 사용하면 Status code를 정해줄 수 있음
        // 다른 사용 방법 : 
        // var response = ResponseEntity.status(200).body(user);
        var response = ResponseEntity.status(HttpStatus.BAD_REQUEST).header("x-custom", "hi").body(user);
 
        return response;
    }
}

Controller Annotation

지금 RestAPI 개발 중에는 기본적으로 RestController Annotation이 붙어있는데, 이는 반드시 RestAPI를 사용할 것이며, Json 데이터를 반환하겠다는 약속이다. 예전에는 Spring에서 Controller Annotation을 많이 썻다고 하는데, 이는 Object를 반환하게 되며, RestAPI를 반환하기 위해서는 Method 위에 @ResponseBody Annotation을 붙여야 했다.

@Slf4j
// 반드시 Rest API를 사용하겠다
// 응답은 반드시 JSON으로 하겠다
@Controller // <-- 원래 쓰던 방식
@RequestMapping("/api/v1")
public class ResponseApiController {
    // http://localhost:8080/api/v1
    @GetMapping("")
    // Controller annotation을 사용햇을 때 
    // RequestBody를 사용해줘야 Json 형태로 데이터가 내려감
    // 만약에 이거 지정 안해주면 404 에러 뜸
    @ResponseBody
    public UserRequest user() {
        var user = new UserRequest();
        user.setUserName("홍길동");
        user.setAge(10);
        user.setUserEmail("rookedsysc36@gmail.com");
 
        log.info("user : {}", user); 
 
        return user;
    }
}