BE Setup - PIC-2-team/PIC-2-team-project GitHub Wiki
dependencies {
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.1.0'
}Spring Boot 3.x μ¬μ©μΌλ‘ springdoc 3.x μ μ© (Spring Boot 2.xλΌλ©΄ springdoc 2.6.0 μ¬μ©)
springdoc:
api-docs:
path: /api-docs
swagger-ui:
path: /swagger-ui// ApiResponse.java
@Schema(description = "κ³΅ν΅ μ±κ³΅ μλ΅")
public record ApiResponse<T>(boolean success, T data) {
public static <T> ApiResponse<T> ok(T data) {
return new ApiResponse<>(true, data);
}
}
// ApiError.java
public record ApiError(String code, String message) {}
// ApiErrorResponse.java
@Schema(description = "κ³΅ν΅ μλ¬ μλ΅")
public record ApiErrorResponse(boolean success, ApiError error) {
public static ApiErrorResponse of(String code, String message) {
return new ApiErrorResponse(false, new ApiError(code, message));
}
}@RestController
@RequestMapping("/api/example")
@Tag(name = "Example", description = "μμ API")
public class ExampleController {
@GetMapping("/{id}")
@Operation(summary = "λ¨κ±΄ μ‘°ν")
public ResponseEntity<ApiResponse<ExampleDto>> getOne(@PathVariable Long id) {
return ResponseEntity.ok(ApiResponse.ok(/* service νΈμΆ */));
}
@PostMapping
@Operation(summary = "μμ±")
public ResponseEntity<ApiResponse<ExampleDto>> create(@RequestBody ExampleRequest request) {
return ResponseEntity.status(201).body(ApiResponse.ok(/* service νΈμΆ */));
}
}μλ² μ€ν ν:
- Swagger UI:
http://localhost:8080/swagger-ui - OpenAPI JSON:
http://localhost:8080/api-docs
cd frontend
npm run generate:api # src/types/api.ts μλ μμ±API μλ΅ ν¬λ§· 컨벀μ μ API-Response-Convention μ°Έκ³