์์ธยท์๋ต์ ์ฝ๋๋ก ์ฎ๊ธธ ๋์ ํก๋จ ๊ท์น + Swagger ์์ฑ ๊ฐ์ด๋. ๊ด๋ จ: ์๋ฌ์ฝ๋/์์ธ
exception.md, ์ฑ๊ณต ์๋ตresponse.md.
๋๋ฉ์ธ๋ง๋ค ์์ธ ํด๋์ค๋ฅผ ๋ง๋ค์ง ๋ง๊ณ ๊ณตํต ์์ธ ํ์
(exception.md)์ XxxErrorCode๋ฅผ ๋๊ธด๋ค.
// Good
throw new NotFoundException(ChartOptionErrorCode.CHART_OPTION_NOT_FOUND);
// Bad โ ๊ฐ๋ณ ํด๋์ค ๋ง๋ค์ง ๋ง ๊ฒ
throw new ChartOptionNotFoundException();- ๊ฐ ๋๋ฉ์ธ
presentation/api/์XxxResponseCode(์ฝ๋ ์์) +XxxResponseMessage(๋ฉ์์ง ์์) ๋ ํด๋์ค๋ฅผ ๋๋ค. - ์์๋ช
์ ๋์ฌ ์์ด ํ์/์ํ ๊ฒฐ๊ณผ๋ก ํํ:
OK,SAVED,CREATED๋ฑ. - ์ฝ๋ ๋ฌธ์์ด ํฌ๋งท:
{์ ๋์ด}-{HTTP์ํ}(ํ ์ฝ๋ ๊ธฐ์ค โ ์:CHO-200,CHO-201). - ์์ฑ์
privateโ ์ธ์คํด์คํ ๊ธ์ง.
public class ChartOptionResponseCode {
private ChartOptionResponseCode() {}
public static final String OK = "CHO-200";
public static final String SAVED = "CHO-200";
public static final String CREATED = "CHO-201";
}
public class ChartOptionResponseMessage {
private ChartOptionResponseMessage() {}
public static final String OK = "์ฐจํธ ์ต์
์กฐํ ์ฑ๊ณต";
public static final String SAVED = "์ฐจํธ ์ต์
์ ์ฅ ์ฑ๊ณต";
public static final String CREATED = "์ฐจํธ ์ต์
์์ฑ ์ฑ๊ณต";
}์์กด์ฑ: springdoc-openapi-starter-webmvc-ui:2.8.6
Swagger UI: http://localhost:8080/swagger-ui/index.html
@Operation(summary = "ํ๋ก์ ํธ ์ฐจํธ ์ต์
์กฐํ")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "์กฐํ ์ฑ๊ณต"),
@ApiResponse(responseCode = "404", description = "CHO-001: ์ฐจํธ ์ต์
์ ์ฐพ์ ์ ์์")
})
@GetMapping
public ResponseEntity<ApiResponse<?>> getChartOption(@PathVariable Long projectId) { ... }- ๊ณตํต ์๋ฌ(
401,403,500)๋ ์๋ต ๊ฐ๋ฅ โGlobalExceptionHandler์์ ์๋ ์ฒ๋ฆฌ - ๋๋ฉ์ธ๋ณ ์๋ฌ๋ง
@ApiResponse๋ก ๋ช ์ description์ ์๋ฌ์ฝ๋ ํฌํจ:"CHO-001: ์ฐจํธ ์ต์ ์ ์ฐพ์ ์ ์์"