일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 바디캐싱
- 오리지널팬케이스하우스 판교점
- 데이터베이스
- menu만들기
- 한남동중식
- 사용자별메뉴
- csv업로드
- jue
- 판교테크원타워맛집
- 컬럼타입변경
- xcrunerror
- 재귀구문
- 시청역놀곳
- MAC
- 유에이치스위트서울스퀘어
- 500에러관리
- 스프링부트
- 오리지널팬케이스하우스
- cachedbodyhttpservletrequest
- 디너요리추천
- csv다운로드
- 시청역숙소
- 유에이치스위트
- 400에러관리
- MySQL
- 데이터업로드
- 권한별메뉴만들기
- 신사동이자카야
- httpcode
- springboot
- Today
- Total
IT모저모
[SpringBoot] ResponseEntity로 Http 코드에 따라 응답데이터 반환하기 본문
초기 개발 시작할 때는 컨트롤러 작성할 때 http코드를 생각하지 못하고 반환해서 무작위로 오류를 반환하고 그랬는데요..
http 코드별로 ResponseEntity를 사용할 수 있다하니 바로 적용해보겠습니다.
특별한 경우의 http코드만 취급해보겠습니다 !!
1. 200 OK
리소스 조회 성공 시 데이터를 반환합니다.
언제 사용할 수 있을까 하면 데이터를 Read할 때 사용할 수 있겠죠?
@Slf4j
@RestController
@RequestMapping("/api/v1")
public class UserInfoController {
@GetMapping("/resource/{id}")
public ResponseEntity<Resource> getResource(@PathVariable Long id) {
Optional<Resource> resource = resourceService.findById(id);
return resource.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
}
해당 코드는 map과 orElse를 사용하여 200코드를 반환하거나 없을 때 204코드를 반환하는 코드입니다.
Optional<?> 로 작성하게 되면 isPresent와 isEmpty를 통해 null값 판정하는데 좋고 entity를 반환하는데에도 좋다 판단합니다.
4. 400 BAD REQUEST
클라이언트 요청이 유효하지 않을 때 사용합니다.
@Slf4j
@RestController
@RequestMapping("/api/v1")
public class UserInfoController {
@PostMapping("/resource")
public ResponseEntity<String> createInvalidResource(@RequestBody Resource resource) {
if (!isValid(resource)) {
return ResponseEntity.badRequest().body("Invalid resource data");
}
Resource createdResource = resourceService.save(resource);
return ResponseEntity.ok(createdResource);
}
}
5. 401 UNAUTHORIZED
인증이 필요한 요청에서 인증되지 않았을 경우 반환합니다.
@Slf4j
@RestController
@RequestMapping("/api/v1")
public class UserInfoController {
@GetMapping("/protected")
public ResponseEntity<String> getProtectedResource() {
if (!isAuthenticated()) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Authentication required");
}
return ResponseEntity.ok("Protected data");
}
}
SpringSecurity를 사용하게 되면 isAuthenticated() 함수를 사용할 수 있습니다.
6. 403 FORBIDDEN
권한이 없는 사용자가 요청할 경우 반환합니다.
권한이나 특정 롤에 따라 기능, 페이지를 나누는 경우가 있는데 그 때 사용하기에 좋겠지요.
예시 코드는 admin data에 접속했을 때 권한이 없음을 리턴하는 코드입니다.
@Slf4j
@RestController
@RequestMapping("/api/v1")
public class UserInfoController {
@GetMapping("/admin")
public ResponseEntity<String> getAdminResource() {
if (!hasAdminRights()) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Access denied");
}
return ResponseEntity.ok("Admin data");
}
}
7. 404 NOT FOUND
요청한 리소스가 없을 때 반환합니다.
보통 404, 500 코드가 빈번히 발생하는데 그 부분에서 유용하게 사용할 수 있겠죠
@GetMapping("/api/error")
public ResponseEntity<String> triggerServerError() {
try {
throw new RuntimeException("Server error occurred");
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
8. 500 INTERNAL SERVER ERROR
서버에서 예외가 발생했을 경우 사용합니다.
데이터베이스나 다른 부분에서 오류가 생겼을 경우, 반환하기도 합니다.
@GetMapping("/api/error")
public ResponseEntity<String> triggerServerError() {
try {
throw new RuntimeException("Server error occurred");
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
나중에 저를 위해 정리한 글입니다..
일을 일주일 쉬면 바로 까먹는 타입이라..하항
Anyway !!
ResponseEntity는 HTTP 상태 코드, 응답 헤더, 응답 본문을 조합하여 다양한 상황에 맞는 HTTP 응답을 구성할 수 있습니다.
이를 통해 RESTful API에서 클라이언트와 서버 간의 명확한 통신을 구현할 수 있습니다.
감사합니다 ~~!!
'Develop > SpringBoot' 카테고리의 다른 글
[SpringBoot] UserRole에 따라 Menu 접근 권한 나누기 (0) | 2024.12.17 |
---|---|
[SpringBoot] 데이터 엑셀 다운로드 (feat. 어노테이션만들기, (0) | 2024.12.10 |
[SpringBoot] getReader 오류 발생 (해결) (2) | 2024.12.02 |
[Springboot] 400에러페이지 설정하기 (0) | 2023.07.05 |
[JSP] File Upload/Download 구현하기 (0) | 2023.05.23 |