2021. 12. 22. 14:49ใBackend/๐ฟ Spring
[ ๊ธฐ์กด ์์ธ์ฒ๋ฆฌ ํธ๋ค๋ฌ ์ฝ๋ ]
๋ฆฌํด ํ์
์ด ResponseEntity ์ธ ํด๋์ค๋ค. ๋ฌธ์ ์์ด ์๋ฌ์ฒ๋ฆฌ
๋ฅผ ํ๊ณ ์์๋๋ฐ,
๋ฆฌํด ํ์ ์ KlagoExceptionDTO ๋ก ๋ฐ๊พธ์ด ๋ณด๊ณ ์ถ์์ต๋๋ค. (KlagoExceptionDTO ๋ ์ปค์คํ ์์ธ์ฒ๋ฆฌ DTO ์ ๋๋ค.)
์ด์ ๋ ResponseEntity์ ๋๋ฒ์งธ ์ธ์๋ก ๋งค๋ฒ httpStatus ์ฝ๋๋ฅผ ์ฝ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ธ๋ฐ,
@ResponseStatus() ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉด ์กฐ๊ธ๋ ์ง๊ด์ ์ธ ์ฝ๋๊ฐ ๋ ๊ฒ์ด๋ผ ์๊ฐํ์ต๋๋ค.
( * ์ฌ์ค httpStatus ๋ฅผ ๋๊ธฐ๋ ๊ฒ๊ณผ @ResponseStatus() ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ ๊ฒ์ ์ฐจ์ด๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค. )
@ControllerAdvice
public class KlagoExceptionAdvice {
@ExceptionHandler(KlagoCustomException.class)
public ResponseEntity<?> invalidParamException(KlagoCustomException e) {
HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
KlagoExceptionDTO klagoExceptionDTO = new KlagoExceptionDTO(
e.getCode(),
e.getMessage(),
e
);
return new ResponseEntity<>(klagoExceptionDTO, httpStatus);
}
}
[ ๋ฆฌํด ํ์ ๋ณ๊ฒฝํ ์ฝ๋ ]
์๋์ฒ๋ผ ์์ ํ์๋๋ฐ javax.servlet.ServletException ์ด ๋ฐ์ํ์ต๋๋ค.
@ControllerAdvice
public class KlagoExceptionAdvice {
@ExceptionHandler(KlagoCustomException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public KlagoExceptionDTO invalidParamException(KlagoCustomException e) {
KlagoExceptionDTO klagoExceptionDTO = new KlagoExceptionDTO(
e.getCode(),
e.getMessage(),
e
);
return klagoExceptionDTO;
}
}
[err] javax.servlet.ServletException: Circular view path [selectTest]: would dispatch back to the current handler URL ...
์๋ฌ ๋ฐ์์ ์์ธ์ @ResponseBody ์ ๋ถ์ฌ ๋๋ฌธ์ ๋๋ค.
์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์๋ต์ ๋ณด๋ผ ๋, ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ๋ณด๋ด์ผํ๋๋ฐ ์ด ๋ณธ๋ฌธ์ด ๋ฐ๋ก HTTP ์ body ์ ํด๋น๋ฉ๋๋ค.
์ฆ ์์ฒญ๋ณธ๋ฌธ์ requestBody, ์๋ต๋ณธ๋ฌธ์ responseBody ์ ๋ด์์ ๋ณด๋ด์ผํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ ์ ์ฝ๋์ธ ResponseEntity<> ํ์ ์ ๋ฆฌํดํ ๋ ServletException ์ด ๋ฐ์ํ์ง ์์๋ ์ด์ ๋ฅผ ์ถ๋ก ํ ์ ์์ต๋๋ค.
์ฐ์ ResponseEntity ๋ด๋ถ๋ฅผ ๊น๋ณด๊ฒ ์ต๋๋ค. ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ body ๋ผ๊ณ ๋ช ์๋ผ ์๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
์ฆ ResponseEntity ํ์ ์ ์ฌ์ฉํ๋ค๋๊ฑด ์๋์ผ๋ก HTTP ์ body ๋ฅผ ํฌํจํ๋ค๋ ๋ป์ ๋๋ค.
๊ทธ๋ฆฌํ์ฌ ๋ฌธ์ ์์ด ResponseBody ์ ๋ฐ์ดํฐ(KlagoExceptionDTO, httpStatus) ๋ฅผ ๋ด์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค.
[ ํด๊ฒฐ๋ฐฉ๋ฒ ]
๊ทธ๋ ๋ค๋ฉด ResponseEntity ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ด๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์ ?
ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ด๋ Controller ๋ฅผ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค. ๋ฑํ ResponseEntity ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ ์๋ต์ ์ ๋ณด๋ผ ์ ์์์ต๋๋ค.
์ด์ ๋ ๋ฐ๋ก @ResponseBody ์ด๋ ธํ ์ด์ ๋๋ถ์ธ๋ฐ์, ํด๋น ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ์๋ฐ ๊ฐ์ฒด๋ฅผ HTTP ์๋ต ๋ณธ๋ฌธ์ ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ํด๋ผ์ด์ธํธ๋ก ์ ์กํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ ๊ธฐ์ @ResponseBody ์ด๋ ธํ ์ด์ ์ KlagoExceptionAdvice ํด๋์ค์ ๋ถ์ฌ์ฃผ๋ฉด, klagoExceptionDTO ๋ผ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ HTTP Body ์ ๋ด์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค.
์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ์์ ํ๋ฉด ์ ์์ ์ผ๋ก ์์ธ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค.
@ControllerAdvice
@ResponseBody // <- ์ถ๊ฐ๋ ๋ถ๋ถ
public class KlagoExceptionAdvice {
@ExceptionHandler(KlagoCustomException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public KlagoExceptionDTO invalidParamException(KlagoCustomException e) {
KlagoExceptionDTO klagoExceptionDTO = new KlagoExceptionDTO(
e.getCode(),
e.getMessage(),
e
);
return klagoExceptionDTO;
}
}
+ ์กฐ๊ธ ๋ ์์ ์ ํ์๋ฉด, @ControllerAdvice ๋ฅผ @RestControllerAdvice ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด @ResponseBody ์ ์ญํ ๊น์ง ํ ์ ์์ต๋๋ค.
๊ฐ๋จํ๊ฒ ํํํ์๋ฉด, @RestControllerAdvice = @ControllerAdvice + @ResponseBody ๋ก ๋ณผ ์ ์์ต๋๋ค.
@RestControllerAdvice // <- @ControllerAdvice + @ResponseBody
public class KlagoExceptionAdvice {
@ExceptionHandler(KlagoCustomException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public KlagoExceptionDTO invalidParamException(KlagoCustomException e) {
KlagoExceptionDTO klagoExceptionDTO = new KlagoExceptionDTO(
e.getCode(),
e.getMessage(),
e
);
return klagoExceptionDTO;
}
}
[ ๊ฒฐ๊ณผ ]
๊ทธ๋ฆฌํ์ฌ ResponseEntity<> ๋์ KlagoExceptionDTO ํ์ ์ ๊ฐ์ฒด๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ฆฌํดํ ์ ์๊ณ ,
@ResponseStatus() ์ด๋ ธํ ์ด์ ๋ ์ฌ์ฉํ์ฌ ์ง์ ํ ์ํ์ฝ๋๋ฅผ ๋ฐํํ ์ ์๊ฒ ๋์ต๋๋ค.
'Backend > ๐ฟ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฑ๊ธํค ์ปจํ ์ด๋ (0) | 2022.02.06 |
---|---|
์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น (0) | 2022.02.04 |
[Spring] Service, ServiceImpl ์ ๊ด๊ณ (feat. OCP) (1) | 2022.02.02 |
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง (2) | 2022.01.26 |
Spring-boot, postgresql ์ฐ๋ ์ค ๋ฐ์ํ ์๋ฌ (0) | 2021.07.11 |