Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
== Jackson
== Jackson 2

JSON support using https://github.com/FasterXML/jackson[Jackson] library.

Expand All @@ -14,7 +14,7 @@ JSON support using https://github.com/FasterXML/jackson[Jackson] library.
.Java
[source, java, role="primary"]
----
import io.jooby.json.JacksonModule;
import io.jooby.jackson.JacksonModule;

{
install(new JacksonModule()); <1>
Expand All @@ -34,7 +34,7 @@ import io.jooby.json.JacksonModule;
.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.json.JacksonModule;
import io.jooby.jackson.JacksonModule;

{
install(JacksonModule()) <1>
Expand Down Expand Up @@ -62,7 +62,7 @@ Access to default object mapper is available via require call:
.Default object mapper
[source, java, role="primary"]
----
import io.jooby.json.JacksonModule;
import io.jooby.jackson.JacksonModule;

{
install(new JacksonModule());
Expand All @@ -76,7 +76,7 @@ import io.jooby.json.JacksonModule;
.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.json.JacksonModule
import io.jooby.jackson.JacksonModule

{
install(JacksonModule())
Expand All @@ -90,7 +90,7 @@ You can provide your own `ObjectMapper`:
.Custom ObjectMapper
[source, java, role="primary"]
----
import io.jooby.json.JacksonModule;
import io.jooby.jackson.JacksonModule;

{
ObjectMapper mapper = new ObjectMapper();
Expand All @@ -102,7 +102,7 @@ import io.jooby.json.JacksonModule;
.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.json.JacksonModule
import io.jooby.jackson.JacksonModule

{
val mapper = ObjectMapper()
Expand All @@ -116,7 +116,7 @@ This allows to configure JacksonModule for doing `xml` processing:
.XmlMapper
[source, java, role="primary"]
----
import io.jooby.json.JacksonModule;
import io.jooby.jackson.JacksonModule;

{
install(new JacksonModule(new XmlMapper()));
Expand All @@ -126,19 +126,19 @@ import io.jooby.json.JacksonModule;
.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.json.JacksonModule
import io.jooby.jackson.JacksonModule

{
install(JacksonModule(XmlMapper()))
}
----

If you want `jackson` and `xml` processing then install twice:
If you want `json` and `xml` processing then install twice:

.XmlMapper
[source, java, role="primary"]
----
import io.jooby.json.JacksonModule;
import io.jooby.jackson.JacksonModule;

{
install(new JacksonModule(new ObjectMapper()));
Expand All @@ -149,7 +149,7 @@ import io.jooby.json.JacksonModule;
.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.json.JacksonModule
import io.jooby.jackson.JacksonModule

{
install(JacksonModule(ObjectMapper()))
Expand All @@ -164,7 +164,7 @@ Jackson module can be provided by a link:{uiVersion}/#extensions-and-services-de
.Provisioning Modules
[source, java, role="primary"]
----
import io.jooby.json.JacksonModule;
import io.jooby.jackson.JacksonModule;

{
install(new JacksonModule().module(MyModule.class);
Expand All @@ -174,11 +174,11 @@ import io.jooby.json.JacksonModule;
.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.json.JacksonModule
import io.jooby.jackson.JacksonModule

{
install(JacksonModule().module(MyModule::class.java)
}
----

At startup time Jooby ask to dependency injection framework to provide a `MyModule` instance.
At startup time Jooby ask dependency injection framework to provide a `MyModule` instance.
183 changes: 183 additions & 0 deletions docs/asciidoc/modules/jackson3.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
== Jackson 3

JSON support using https://github.com/FasterXML/jackson[Jackson 3] library.

=== Usage

1) Add the dependency:

[dependency, artifactId="jooby-jackson3"]
.

2) Install and encode/decode JSON

.Java
[source, java, role="primary"]
----
import io.jooby.jackson3.Jackson3Module;

{
install(new Jackson3Module()); <1>

get("/", ctx -> {
MyObject myObject = ...;
return myObject; <2>
});

post("/", ctx -> {
MyObject myObject = ctx.body(MyObject.class); <3>
...
});
}
----

.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.jackson3.Jackson3Module;

{
install(Jackson3Module()) <1>

get("/") {
val myObject = ...;
myObject <2>
}

post("/") {
val myObject = ctx.body<MyObject>() <3>
...
}
}
----

<1> Install Jackson
<2> Use Jackson to encode arbitrary object as JSON
<3> Use Jackson to decode JSON to Java object. Client must specify the `Content-Type: application/json` header

=== Working with ObjectMapper

Access to default object mapper is available via require call:

.Default object mapper
[source, java, role="primary"]
----
import io.jooby.jackson3.Jackson3Module;

{
install(new Jackson3Module());

ObjectMapper mapper = require(ObjectMapper.class);
...
}
----

.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.jackson3.Jackson3Module

{
install(Jackson3Module())

val mapper = require<ObjectMapper>()
}
----

You can provide your own `ObjectMapper`:

.Custom ObjectMapper
[source, java, role="primary"]
----
import io.jooby.jackson3.Jackson3Module;

{
ObjectMapper mapper = new ObjectMapper();

install(new Jackson3Module(mapper));
}
----

.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.jackson3.Jackson3Module

{
val mapper = ObjectMapper()

install(Jackson3Module(mapper))
}
----

This allows to configure `Jackson3Module` for doing `xml` processing:

.XmlMapper
[source, java, role="primary"]
----
import io.jooby.jackson3.Jackson3Module;

{
install(new Jackson3Module(new XmlMapper()));
}
----

.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.jackson3.Jackson3Module

{
install(Jackson3Module(XmlMapper()))
}
----

If you want `json` and `xml` processing then install twice:

.XmlMapper+JsonMapper
[source, java, role="primary"]
----
import io.jooby.jackson3.Jackson3Module;

{
install(new Jackson3Module(new JsonMapper()));
install(new Jackson3Module(new XmlMapper()));
}
----

.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.jackson3.Jackson3Module

{
install(Jackson3Module(JsonMapper()))
install(Jackson3Module(XmlMapper()))
}
----

=== Provisioning Jackson Modules

Jackson module can be provided by a link:{uiVersion}/#extensions-and-services-dependency-injection[dependency injection] framework.

.Provisioning Modules
[source, java, role="primary"]
----
import io.jooby.jackson3.Jackson3Module;

{
install(new Jackson3Module().module(MyModule.class);
}
----

.Kotlin
[source, kt, role="secondary"]
----
import io.jooby.jackson3.Jackson3Module

{
install(Jackson3Module().module(MyModule::class.java)
}
----

At startup time Jooby asks dependency injection framework to provide a `MyModule` instance.
3 changes: 2 additions & 1 deletion docs/asciidoc/modules/modules.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ Available modules are listed next.

=== JSON
* link:{uiVersion}/modules/gson[Gson]: Gson module for Jooby.
* link:{uiVersion}/modules/jackson[Jackson]: Jackson module for Jooby.
* link:{uiVersion}/modules/jackson2[Jackson2]: Jackson2 module for Jooby.
* link:{uiVersion}/modules/jackson3[Jackson3]: Jackson3 module for Jooby.
* link:{uiVersion}/modules/yasson[JSON-B]: JSON-B module for Jooby.
* link:{uiVersion}/modules/avaje-jsonb[Avaje-JsonB]: Avaje-JsonB module for Jooby.

Expand Down
2 changes: 1 addition & 1 deletion docs/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<properties>
<application.class>io.jooby.adoc.DocApp</application.class>
<jooby.version>4.0.7</jooby.version>
<jooby.version>4.0.15</jooby.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.release>17</maven.compiler.release>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import io.jooby.output.Output;

/**
* JSON module using Jackson: https://jooby.io/modules/jackson.
* JSON module using Jackson: https://jooby.io/modules/jackson2.
*
* <p>Usage:
*
Expand Down Expand Up @@ -72,7 +72,7 @@
* }
* }</pre>
*
* Complete documentation is available at: https://jooby.io/modules/jackson.
* Complete documentation is available at: https://jooby.io/modules/jackson2.
*
* @author edgar
* @since 2.0.0
Expand Down
54 changes: 54 additions & 0 deletions modules/jooby-jackson3/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.jooby</groupId>
<artifactId>modules</artifactId>
<version>4.0.16-SNAPSHOT</version>
</parent>
<artifactId>jooby-jackson3</artifactId>
<name>jooby-jackson3</name>

<dependencies>
<dependency>
<groupId>io.jooby</groupId>
<artifactId>jooby</artifactId>
<version>${jooby.version}</version>
</dependency>

<!-- jackson -->
<dependency>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

<!-- Test dependencies -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<classifier>runtime</classifier>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>tools.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<scope>test</scope>
</dependency>

</dependencies>
</project>
Loading