본문 바로가기
스파르타 내배캠

[TIL] #25. HTTP 응답 상태 반환

by saemsaem 2024. 5. 28.


 

 [ Spring에서 특정 HTTP 응답 상태 반환하기 ] 

HTTP Response Status Code

100 : 정보코드
200 : 요청이 완료됨
300 : redirection. 요청을 처리하기 위한 추가 조치가 필요함
400 : 요청 실패
500 : 서버에 문제가 있음

 

ResponseEntity 객체응답

@PostMapping("/students")
public ResponseEntity<Student> postStudent(@RequestBody Student student) {
    log.info("Request to create student: {}", student); 
    Student newStudent = service.addNewStudent(student);
    return new ResponseEntity<>(student, HttpStatus.CREATED);
}

POST /students API를 호출하면 controller는 201 응답 코드를 반환한다.

 

@ResponseStatus

a. 예외 클래스에서 사용

@ResponseStatus(
    value = HttpStatus.NOT_FOUND, 
    reason = "Requested student does not exist"
)
public class StudentNotFoundException 
    extends RuntimeException {
 
  public StudentNotFoundException(Throwable t) {
    super(t);
  }
}

controller에서 StudentNotFoundException이 발생하면 spring은 지정된 HTTP 응답 사태 코드를 자동으로 반환한다. 

 

b. @ExceptionHandler에서 사용

@ExceptionHandler({MyCustomException.class})
@ResponseStatus(
    value = HttpStatus.INTERNAL_SERVER_ERROR, 
    reason = "this is the reason"
)
public void handle() {...}

 

c. Controller에서 사용

@PostMapping("/students")
@ResponseStatus(HttpStatus.CREATED)
public void postStudent(@RequestBody Student student) {
    log.info("Request to create student: {}", student);
    service.addNewStudent(student);
}

@ResponseStatus 어노테이션이 지정된 controller메서드는 응답 payload 없이 특정 상태코드만 응답할 수 있다.

 

ResponseStatusException 예외

@PostMapping("/students")
public void postStudent(@RequestBody Student student) {
  
    log.info("Request to create student: {}", student);
    try {
        repository.save(student);
    } catch (InvalidStudentException e) {
        throw  new ResponseStatusException(HttpStatus.BAD_REQUEST);
    } catch (StudentServiceException e){
        throw  new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

정상동작의 경우 200 응답 코드를 전송한다.
InvalidStudentException이 발생한 경우 BAD_REQUEST 응답 코드를 전송한다.
StudentServiceException이 발생한 경우 INTERNAL_SERVER_ERROR 응답 코드를 전송한다.

 

'스파르타 내배캠' 카테고리의 다른 글

[TIL] #27. JWT Util  (0) 2024.05.30
[TIL] #26. entity 연결  (0) 2024.05.28
[TIL] #24. JWT  (0) 2024.05.24
[TIL] #23. 연관관계  (0) 2024.05.24
[TIL] #22. 4주차 강의  (0) 2024.05.22