Setting Up Swagger 2 with Spring Boot

Setting up Swagger 2 with Spring Boot

Table of Contents

In today’s enterprise software development world, separating the front-end and back-end of a web application is almost a necessity. Consequently, this situation might shape teams or engineers who work on the front and back-end side and eventually require clear and up-to-date API documentation between sides. 

Therefore Swagger is an essential open-source toolset that helps you generate beautiful and informative documentation and enables you to design your APIs.

In this tutorial, I will explain “how to set up Swagger 2 on top of a Spring Boot application” in detail.

Check out the complete source code for the “Swagger 2 with Spring Boot” tutorial from the Exceptionly Github account – blog-spring-boot-docker repository. 

Adding the Swagger 2 Gradle Dependency

With any third-party library, we will need to add the Swagger dependency to the application. For this tutorial, I will use Springfox implementation of the Swagger specification. Feel free to check out the latest version from

					implementation 'io.springfox:springfox-boot-starter:3.0.0'

Refresh Gradle dependencies to make sure we fetch the springfox-boot-starter correctly.

Spring Boot Configuration

To enable a Spring Boot application for Swagger, we need to create a Docket bean that will initiate an instance with defaults and the details you specified in the configuration.

public class SwaggerConfig {

    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)

Setting up Swagger in Spring Boot is easy as pie. You actually may spend way more time to verify it by creating an API 🙂 

Creating Sample API

I will create a simple Customer Controller that basically will provide 3 APIs

GET  /customer/{id}

DELETE /customer/{id}

POST /customer

public class CustomerController {
    private final CustomerService customerService;

    public CustomerController(CustomerService customerService) {
        this.customerService = customerService;

    public ResponseEntity<Customer> get(@PathVariable final Long id) {
        return ResponseEntity.ok(customerService.get(id));

    public ResponseEntity<Customer> delete(@PathVariable final Long id) {
        return ResponseEntity.ok(customerService.delete(id));

    public ResponseEntity<Customer> save(@RequestBody final Customer customer) {
        return ResponseEntity.ok(;

Create an interface for Service with default methods.

					public interface CustomerService {
    Customer get(Long id);
    Customer delete(Long id);
    Customer save(Customer customer);

And Service implementation;

public class CustomerServiceImpl implements CustomerService {
    public Customer get(Long id) {
        return new Customer(id, "Janis", "Joplin");

    public Customer delete(Long id) {
        return new Customer(id, "Chuck", "Norris");

    public Customer save(Customer customer) {
        return new Customer(1L, customer.getName(), customer.getSurname());

Run the application from Spring Boot application starter or by the following command;

					./gradlew bootRun

Once the application is started, navigate to the URL http://localhost:8080/swagger-ui/index.html to check out the Swagger UI.

One Response

  1. Pingback: Exceptionly

Leave a Reply

Your email address will not be published. Required fields are marked *