From 676efbcf9920ac311f9eee07768db7188b364dba Mon Sep 17 00:00:00 2001
From: Josiah Noel <32279667+SentryMan@users.noreply.github.com>
Date: Fri, 21 Oct 2022 10:09:37 -0500
Subject: [PATCH] add startup step/jsonB
---
README.md | 142 +++++++++++++++++++++++++++++++-----------------------
1 file changed, 83 insertions(+), 59 deletions(-)
diff --git a/README.md b/README.md
index 27791c35d..c13cc5321 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
Http server and client libraries and code generation.
-## http server
+## Http Server
A jax-rs style controllers with annotations (`@Path`, `@Get` ...)
that is lightweight by using source code generation (annotation processors)
@@ -11,8 +11,39 @@ to generate adapter code for Javalin and Helidon SE/Nima.
- Lightweight as in 65Kb library + generated source code
- Full use of Javalin or Helidon SE/Nima as desired
+## Add dependencies
-## Define a Controller (Note that these APT processors works with both Java and Kotlin.)
+```xml
+
+ io.avaje
+ avaje-http-api
+ ${avaje.http.version}
+
+```
+Add the generator module for your desired microframework as a annotation processor.
+
+```xml
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+
+ io.avaje
+ avaje-http-javalin-generator
+ ${avaje.http.version}
+
+
+
+
+
+
+```
+
+## Define a Controller (These APT processors work with both Java and Kotlin.)
```java
package org.example.hello;
@@ -41,7 +72,6 @@ public class WidgetController {
record Widget(int id, String name){};
}
-
```
## Usage with Javalin
@@ -95,59 +125,39 @@ WebServer.builder()
### (Javalin) The generated WidgetController$Route.java is:
```java
-package org.example.hello;
-
-import static io.avaje.http.api.PathTypeConversion.*;
-import io.avaje.http.api.WebRoutes;
-import io.javalin.apibuilder.ApiBuilder;
-import javax.annotation.Generated;
-import javax.inject.Singleton;
-import org.example.hello.WidgetController;
-
-@Generated("io.avaje.javalin-generator")
-@Singleton
+@Generated("avaje-javalin-generator")
+@Component
public class WidgetController$Route implements WebRoutes {
- private final WidgetController controller;
+ private final WidgetController controller;
- public WidgetController$route(WidgetController controller) {
- this.controller = controller;
- }
+ public WidgetController$Route(WidgetController controller) {
+ this.controller = controller;
+ }
@Override
public void registerRoutes() {
ApiBuilder.get("/widgets/{id}", ctx -> {
- int id = asInt(ctx.pathParam("id"));
- ctx.json(controller.getById(id));
ctx.status(200);
+ var id = asInt(ctx.pathParam("id"));
+ var result = controller.getById(id);
+ ctx.json(result);
});
ApiBuilder.get("/widgets", ctx -> {
- ctx.json(controller.getAll());
ctx.status(200);
+ var result = controller.getAll();
+ ctx.json(result);
});
}
+
}
```
### (Helidon SE) The generated WidgetController$Route.java is:
```java
-package org.example.hello;
-
-import static io.avaje.http.api.PathTypeConversion.*;
-
-import io.avaje.http.api.*;
-import io.helidon.common.http.FormParams;
-import io.helidon.webserver.Handler;
-import io.helidon.webserver.Routing;
-import io.helidon.webserver.ServerRequest;
-import io.helidon.webserver.ServerResponse;
-import io.helidon.webserver.Service;
-import jakarta.inject.Singleton;
-import org.example.hello.WidgetController;
-
@Generated("io.dinject.helidon-generator")
@Singleton
public class WidgetController$Route implements Service {
@@ -180,19 +190,6 @@ public class WidgetController$Route implements Service {
### (Helidon Nima) The generated WidgetController$Route.java is:
```java
-package org.example.hello;
-
-import static io.avaje.http.api.PathTypeConversion.*;
-
-import io.avaje.http.api.*;
-import io.avaje.inject.Component;
-import io.helidon.nima.webserver.http.HttpRouting;
-import io.helidon.nima.webserver.http.HttpRules;
-import io.helidon.nima.webserver.http.HttpService;
-import io.helidon.nima.webserver.http.ServerRequest;
-import io.helidon.nima.webserver.http.ServerResponse;
-import org.example.hello.WidgetController;
-
@Generated("avaje-helidon-nima-generator")
@Component
public class WidgetController$Route implements HttpService {
@@ -224,22 +221,49 @@ public class WidgetController$Route implements HttpService {
}
```
-### (Helidon Nima with Avaje-Jsonb) The generated WidgetController$Route.java is:
+## Generated sources ([Avaje-Jsonb](https://github.com/avaje/avaje-jsonb))
+If [Avaje-Jsonb](https://github.com/avaje/avaje-jsonb) is detected, http generators with support will use it for faster Json message processing.
+### (Javalin) The generated WidgetController$Route.java is:
```java
-package org.example.hello;
+@Generated("avaje-javalin-generator")
+@Component
+public class WidgetController$Route implements WebRoutes {
-import static io.avaje.http.api.PathTypeConversion.*;
+ private final WidgetController controller;
+ private final JsonType> listWidgetJsonType;
+ private final JsonType widgetJsonType;
+
+ public WidgetController$Route(WidgetController controller, Jsonb jsonB) {
+ this.controller = controller;
+ this.listWidgetJsonType = jsonB.type(org.example.hello.WidgetController.Widget.class).list();
+ this.widgetJsonType = jsonB.type(org.example.hello.WidgetController.Widget.class);
+ }
+
+ @Override
+ public void registerRoutes() {
+
+ ApiBuilder.get("/widgets/{id}", ctx -> {
+ ctx.status(200);
+ var id = asInt(ctx.pathParam("id"));
+ var result = controller.getById(id);
+ widgetJsonType.toJson(result, ctx.contentType("application/json").outputStream());
+ });
-import io.avaje.http.api.*;
-import io.avaje.inject.Component;
-import io.helidon.nima.webserver.http.HttpRouting;
-import io.helidon.nima.webserver.http.HttpRules;
-import io.helidon.nima.webserver.http.HttpService;
-import io.helidon.nima.webserver.http.ServerRequest;
-import io.helidon.nima.webserver.http.ServerResponse;
-import org.example.hello.WidgetController;
+ ApiBuilder.get("/widgets", ctx -> {
+ ctx.status(200);
+ var result = controller.getAll();
+ listWidgetJsonType.toJson(result, ctx.contentType("application/json").outputStream());
+ });
+
+ }
+}
+```
+
+### (Helidon Nima) The generated WidgetController$Route.java is:
+
+```java
@Generated("avaje-helidon-nima-generator")
@Component
public class WidgetController$Route implements HttpService {