반응형
12-24 00:25
- Today
- Total
Link
개발하는 고라니
[Spring Boot] API Error message가 나오지 않을 때 본문
반응형
specification]
spring boot - 2.6.3
서론
API를 만들면 종종 Exception이 발생하기 마련이다.
Client에서 요청을 했는데, 예외가 발생했을 때 구체적이고 명시적으로 어떤 에러, 무엇 때문에 발생했는지를 "message"에 담아서 보낸다.
fun validateMoney(money: BigDecimal) {
if (money < BigDecimal(0)) {
throw MinusMoneyException("금액이 음수입니다. money : $money")
}
}
하지만, 그간 무심코 넘어갔지만 에러 메세지를 확인해보려니 다음과 같이 발생한 적이 있을 것이다.
{
"timestamp": "2023-02-27T08:43:33.081+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/api/v1/samples/error"
}
난 분명히 메세지를 전달했는데...?
본론
다음과 같이 Error를 발생하는 API가 있다고 하자.
@RestController
class SampleController {
@GetMapping("/api/v1/samples/error")
fun throwException(): ResponseEntity<*> {
throw RuntimeException("sample 예외가 발생합니다.")
}
}
이를 postman에서 호출했고, 나는 "sample 예외가 발생합니다" 라는 메세지를 받고싶으나, 다음과 같이 발생한다.
내 메세지는 어디갔을까.. 답은 baeldung에서 찾을 수 있었다.
Starting from the 2.3 version, Spring Boot doesn't include an error message on the default error page.
The reason is to reduce the risk of leaking information to a client
spring boot 2.3 버전 부터는 클라이언트에 정보가 누수될까봐, 기본 에러페이지에 에러메세지를 담지 않는다고 한다.
결론
해결법은 간단했다.
YAML or properties 파일에 설정하나만 넣어주면 된다.
# application.yml
server:
error:
include-message: always
# application.properties
server.error.include-message=always
다시 위 경로로 호출해보니, 기대하던 결과가 반환되었다.
{
"timestamp": "2023-02-27T08:56:40.461+00:00",
"status": 500,
"error": "Internal Server Error",
"message": "sample 예외가 발생합니다.",
"path": "/api/v1/samples/error"
}
# 코드
# Reference
반응형
'Framework > Spring Boot' 카테고리의 다른 글
간단하게 UnitTest와 IntegrationTest 분리하기 (with. kotlin gradle dsl) (1) | 2023.02.28 |
---|---|
[Spring Boot] Kotlin Querydsl 적용 (with. Mono repo, Multi module) (3) | 2022.02.27 |
[Spring Boot] Mono Repo, Multi Module (with. Gradle Kotlin DSL) (2) | 2022.02.20 |
[Spring Boot] Controller Test (0) | 2021.12.04 |
[Spring Boot] WebSocket과 채팅 (4) - RabbitMQ (13) | 2021.07.30 |
Comments