Skip to content

Commit 9d8eec7

Browse files
committed
[feature] create /version endpoint and return api version in all requests as X-BBLVALIDATOR-VERSION
1 parent 1467959 commit 9d8eec7

5 files changed

Lines changed: 97 additions & 2 deletions

File tree

pom.xml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@
5353
<version>${micronaut.validation.version}</version>
5454
</dependency>
5555

56+
<!-- Micronaut Serde API - Required for @Serdeable annotation -->
57+
<dependency>
58+
<groupId>io.micronaut.serde</groupId>
59+
<artifactId>micronaut-serde-api</artifactId>
60+
<version>2.16.2</version>
61+
</dependency>
62+
5663
<!-- https://mvnrepository.com/artifact/io.micronaut.serde/micronaut-serde-jackson -->
5764
<dependency>
5865
<groupId>io.micronaut.serde</groupId>
@@ -61,13 +68,28 @@
6168
<scope>runtime</scope>
6269
</dependency>
6370

71+
<!-- Integration between Micronaut and Reactor for request middleware -->
72+
<dependency>
73+
<groupId>io.micronaut.reactor</groupId>
74+
<artifactId>micronaut-reactor</artifactId>
75+
<version>3.9.1</version>
76+
</dependency>
77+
6478
<!-- Logback for logging -->
6579
<dependency>
6680
<groupId>ch.qos.logback</groupId>
6781
<artifactId>logback-classic</artifactId>
6882
<version>1.5.21</version>
6983
<scope>runtime</scope>
7084
</dependency>
85+
86+
<!-- SnakeYAML for YAML configuration support -->
87+
<dependency>
88+
<groupId>org.yaml</groupId>
89+
<artifactId>snakeyaml</artifactId>
90+
<version>2.0</version>
91+
<scope>runtime</scope>
92+
</dependency>
7193
</dependencies>
7294

7395
<build>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.evolvedbinary.bblValidator.controller;
2+
3+
import com.evolvedbinary.bblValidator.dto.ApiVersion;
4+
import io.micronaut.context.annotation.Value;
5+
import io.micronaut.http.MediaType;
6+
import io.micronaut.http.annotation.Controller;
7+
import io.micronaut.http.annotation.Get;
8+
import io.micronaut.http.annotation.Produces;
9+
10+
@Controller
11+
public class VersionController {
12+
13+
private final String version;
14+
15+
public VersionController(@Value("${api.version}") String version) {
16+
this.version = version;
17+
}
18+
19+
@Get("/version")
20+
@Produces(MediaType.APPLICATION_JSON)
21+
public ApiVersion getVersion() {
22+
return new ApiVersion(version);
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.evolvedbinary.bblValidator.dto;
2+
3+
import io.micronaut.serde.annotation.Serdeable;
4+
5+
@Serdeable
6+
public class ApiVersion {
7+
8+
private String version;
9+
10+
public ApiVersion() {
11+
}
12+
13+
public ApiVersion(String version) {
14+
this.version = version;
15+
}
16+
17+
public String getVersion() {
18+
return version;
19+
}
20+
21+
public void setVersion(String version) {
22+
this.version = version;
23+
}
24+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.evolvedbinary.bblValidator.filter;
2+
3+
import io.micronaut.context.annotation.Value;
4+
import io.micronaut.http.HttpRequest;
5+
import io.micronaut.http.MutableHttpResponse;
6+
import io.micronaut.http.annotation.Filter;
7+
import io.micronaut.http.filter.HttpServerFilter;
8+
import io.micronaut.http.filter.ServerFilterChain;
9+
import org.reactivestreams.Publisher;
10+
import reactor.core.publisher.Flux;
11+
12+
@Filter("/**")
13+
public class ApiVersionFilter implements HttpServerFilter {
14+
15+
@Value("${api.version}")
16+
private String version;
17+
18+
@Override
19+
public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
20+
return Flux.from(chain.proceed(request))
21+
.doOnNext(response -> response.header("X-BBLVALIDATOR-VERSION", version));
22+
}
23+
}

src/main/resources/application.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
micronaut:
22
application:
3-
name: micronaut-mvp
3+
name: bbl-validator
44
server:
5-
port: 8080
5+
port: 8080
6+
api:
7+
version: 1.0.0

0 commit comments

Comments
 (0)