build.gradle
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0'
- springdoc-openapi-starter-webmvc-ui를 사용하면 Swagger UI를 통해 REST API 문서를 시각적으로 확인할 수 있습니다.
@RestController
@RequestMapping("/api/v1")
@Slf4j
public class ResponseController {
// http://localhost:8888/api/v1
@GetMapping("")
public CustomResponse<UserRequest> user(){
var user = new UserRequest();
user.setUsername("홍길동");
user.setUserAge(10);
user.setEmail("hong@gmail.com");
log.info("user: {}", user);
return CustomResponse.ok("user 객체 생성", user);
}
@GetMapping("/test")
public CustomResponse<UserRequest> user(@RequestParam("name") String name){
var user = new UserRequest();
user.setUsername(name);
user.setUserAge(10);
user.setEmail("hong@gmail.com");
log.info("user: {}", user);
return CustomResponse.ok("user 객체 생성", user);
}
}
Swagger annotation
@RestController
@RequestMapping("/api/v1")
@Slf4j
@Tag(name = "Example", description = "Example API")
public class ResponseController {
// http://localhost:8888/api/v1
@GetMapping("/test")
@Operation(summary = "Example API Summary", description = "User Info")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Success",
content = {@Content(schema = @Schema(implementation = CustomResponse.class))}),
@ApiResponse(responseCode = "404", description = "Not Found"),
@ApiResponse(responseCode = "500", description = "Internal Server Error")
})
public UserRequest user(@RequestParam("name") String name,
@RequestParam("age") int age
){
var user = new UserRequest();
user.setUsername(name);
user.setUserAge(age);
user.setEmail("hong@gmail.com");
log.info("user: {}", user);
return user;
}
}
@Tag는 해당 컨트롤러에 대한 설명을 정의한다.
@Operation에서는 각각의 API에 대한 설명을 정의한다.
@ApiResponse에서는 각각의 응답 코드에 따른 케이스를 설명하고 있다. 응답 성공 시 CustomResponse의 형태로 반환함을 알리고 있다.
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
@Schema(title = "User : User 정보")
public class UserRequest {
@Schema(description = "사용자 이름", example = "chan")
private String username;
@Schema(description = "사용자 나이", example = "20")
private int userAge;
@Schema(description = "사용자 이메일", example = "chan111@naver.com")
private String email;
}
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import org.springframework.http.HttpStatus;
@Getter
public class CustomResponse<T> {
@Schema(description = "성공 여부", example = "true")
private boolean success;
@Schema(description = "응답 메세지", example = "Success")
private String message;
@Schema(description = "응답 데이터", example = "Any Data")
private T data;
}
'스터디 > Victor' 카테고리의 다른 글
[Git ] 깃헙 프로젝트와 이슈 정리하기 (0) | 2024.05.26 |
---|---|
[Spring Boot] 인텔리제이 설정 및 플러그인 (0) | 2024.05.26 |
[Spring Boot] 스프링 부트 Response Entity (1) | 2024.05.26 |
DI 종류는 어떤것이 있고, 이들의 차이는 무엇인가요? (0) | 2024.04.18 |
시간 복잡도 (0) | 2024.04.08 |