[ 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 |