Skip to content

chehsunliu/swagger-request-validator-spring-webflux

Repository files navigation

Swagger Request Validator - Spring WebFlux

Test Maven Central Version

A Java library help integrating Swagger Request Validator with Spring WebClient and WebTestClient.

Installation

Add this dependency for Maven:

<dependency>
    <groupId>io.github.chehsunliu</groupId>
    <artifactId>swagger-request-validator-spring-webflux</artifactId>
    <version>${version}</version>
</dependency>

Add this dependency for Gradle:

dependencies {
    implementation("io.github.chehsunliu:swagger-request-validator-spring-webflux:${version}")
}

Usage

import static org.junit.jupiter.api.Assertions.*;

import com.atlassian.oai.validator.OpenApiInteractionValidator;
import io.github.chehsunliu.openapi.validator.OpenApiValidationFilter;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.json.JsonCompareMode;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.web.reactive.function.client.WebClient;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ExampleControllerTest {
    @LocalServerPort
    private int port;

    @Test
    void exampleForWebClient() {
        var validator = OpenApiInteractionValidator.createFor("/openapi/swagger.yaml").build();
        var filter = new OpenApiValidationFilter(validator);
        
        var client = WebClient.builder()
                .baseUrl("http://localhost:%d".formatted(port))
                .filter(filter)
                .build();

        var r = client
                .get()
                .uri("/api/v1/health")
                .retrieve()
                .toEntity(String.class)
                .block();

        assertNotNull(r);
        assertTrue(r.getStatusCode().is2xxSuccessful());
    }

    @Test
    void exampleForWebTestClient() {
        var validator = OpenApiInteractionValidator.createFor("/static/openapi/swagger.yaml").build();
        var filter = new OpenApiValidationFilter(validator);

        var client = WebTestClient.bindToServer()
                .baseUrl("http://localhost:%d".formatted(port))
                .filter(filter)
                .build();

        client
                .get()
                .uri("/api/v1/health")
                .exchange()
                .expectStatus()
                .isOk()
                .expectBody()
                .json("""
{
  "data": {
    "status": "ok"
  }
}
""", JsonCompareMode.STRICT);
    }
}

About

A Java library integrating Atlassian Swagger Request Validator with Spring WebClient and WebTestClient.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages