## json-jsonp
This module provides support to `application/json` using [json-p](https://javaee.github.io/jsonp/), a Java spec to process json content.
`json-p` does not serialize/deserialize JSON to/from POJOs like `json-b` or `jackson`; instead, `json-p` has high-level objects to abstract over a JSON structure.
## Install
### Maven
```xml
com.github.ljtfreitas.julian-http-client
julian-http-client-json-jsonp
${julian-http-client-version}
```
### Gradle
```kotlin
dependencies {
implementation("com.github.ljtfreitas.julian-http-client:julian-http-client-json-jsonp:$julianHttpClientVersion")
}
```
## Usage
With the dependency in place, we can use a [JsonObject](https://javadoc.io/doc/javax.json/javax.json-api/latest/javax/json/JsonObject.html) or a [JsonArray](https://javadoc.io/doc/javax.json/javax.json-api/latest/javax/json/JsonArray.html) to write and read json content.
```java
import javax.json.Json;
import javax.json.JsonObject;
import com.github.ljtfreitas.julian.contract.Path;
import com.github.ljtfreitas.julian.contract.GET;
import com.github.ljtfreitas.julian.contract.POST;
import com.github.ljtfreitas.julian.contract.Body;
@Path("/dogs")
interface DogsApi {
@POST
void create(@Body("application/json") JsonObject dogAsJson);
@GET
JsonArray allDogs();
}
DogsApi dogsApi = new ProxyBuilder().build(DogsApi.class, "http://my.dogs.api");
JsonObject dogAsJson = Json.createObjectBuilder()
.add("name", "Falco")
.add("age", 3)
.build();
dogsApi.create(dogAsJson);
JsonArray allDogs = dogsApi.allDogs();
allDogs.forEach(dog-> // ...);
```
julian-http-client uses [JsonWriter](https://javadoc.io/doc/javax.json/javax.json-api/latest/javax/json/JsonWriter.html) and [JsonReader](https://javadoc.io/doc/javax.json/javax.json-api/latest/javax/json/JsonReader.html) in order to write and read json, and these objects are created using default configurations. Of course, we can customize both, building our own [JsonWriterFactory](https://javadoc.io/doc/javax.json/javax.json-api/latest/javax/json/JsonWriterFactory.html) and [JsonReaderFactory](https://javadoc.io/doc/javax.json/javax.json-api/latest/javax/json/JsonReaderFactory.html):
```java
import com.github.ljtfreitas.julian.ProxyBuilder;
import com.github.ljtfreitas.julian.http.codec.json.jsonp.JsonPHTTPMessageCodec;
import javax.json.Json;
import javax.json.JsonWriterFactory;
import javax.json.JsonReaderFactory;
Map configurations = //...
JsonWriterFactory jsonWriterFactory = Json.createWriterFactory(configurations);
JsonReaderFactory jsonReaderFactory = Json.createWriterFactory(configurations);
MyApi myApi = new ProxyBuilder()
.codecs()
.add(new JsonPHTTPMessageCodec(jsonReaderFactory,jsonWriterFactory))
.and()
.build(MyApi.class);
```