add kontor-javalin

This commit is contained in:
2025-12-16 23:10:15 +01:00
parent 2a51b4a2f3
commit 25bc4e45ff
22 changed files with 572 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
plugins {
id 'application'
}
dependencies {
implementation project(":models") // We need this dependency for serializing persons to JSON
implementation project(":services") // We'll make use of the InMemoryPersonReader soon
implementation libs.javalin // Pulling in Javalin
implementation libs.jackson // For JSON serialization of persons
implementation libs.slf4j // To see some Javalin logging
}
application {
mainClass = "de.thpeetz.kontor.api.Main"
mainModule = "de.thpeetz.kontor.api"
}
@@ -0,0 +1,30 @@
package de.thpeetz.kontor.api;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.javalin.Javalin;
import de.thpeetz.kontor.services.api.PersonReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ServiceLoader;
public class Main {
private static Logger logger = LoggerFactory.getLogger(Main.class);
private static short port = 7312;
public static void main(String[] args) {
var personReader = ServiceLoader.load(PersonReader.class).findFirst().get(); // <-- Getting an implementation
// for the PersonReader interface
// from the ServiceLoader
var objMapper = new ObjectMapper();
var result = objMapper.valueToTree(personReader.getAll());
logger.info("API: found {} people.", personReader.getAll().size());
var app = Javalin.create().start(port);
app.get("/ping", ctx -> ctx.result("pong"));
app.get("/persons", ctx -> ctx.json(result));
logger.info("API's alive for real :-)))");
}
}
@@ -0,0 +1,10 @@
module de.thpeetz.kontor.api {
requires io.javalin;
requires com.fasterxml.jackson.databind;
requires org.slf4j;
requires kotlin.stdlib;
requires de.thpeetz.kontor.services;
uses de.thpeetz.kontor.services.api.PersonReader;
}