Working with JSON
mangoo I/O uses Jackson with Blackbird for JSON serialization and deserialization of objects.
JSON Input
To retrieve JSON sent to your mangoo I/O application, you have three options:
- Automatic object serialization
 - Generic object conversion
 - Working with the raw JSON string
 
Custom Serializer
By default, mangoo I/O does not write out nulls, empty lists, or default values. To ensure a value is included even if it is empty, null, false, or 0, use the @JsonInclude annotation. To exclude a value from JSON generation, use @JsonIgnore.
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Car {
    @JsonInclude
    public String brand = null;
    @JsonInclude
    public int doors = 0;
    @JsonIgnore
    public String comment = "blablabla";
    public String foo = "blablabla";
    public Car() {}
}
Automatic Object Conversion
Given the following JSON input:
{
    "brand": "Nissan",
    "doors": 4
}
You can automatically convert it to a Java object in a controller:
package controllers;
import io.mangoo.routing.Response;
import models.Car;
public class JsonController {
    public Response parse(Car car) {
        // Process the car object
        ...
    }
}
mangoo I/O automatically deserializes JSON into a POJO, making it available in the controller.
Note
Automatic conversion only works with PUT or POST requests having Content-Type: application/json.
If you do not have a POJO but still need to retrieve JSON content, you can use a generic approach:
package controllers;
import io.mangoo.routing.Response;
import io.mangoo.routing.bindings.Request;
import java.util.Map;
public class MyController {
    public Response parse(Request request) {
        Map<String, Object> json = request.getBodyAsJsonMap();
        String foo = (String) json.get("firstname");
    }
}
Handling Raw JSON String
If you prefer working with the raw JSON string, retrieve it from the request body:
package controllers;
import io.mangoo.routing.Response;
import io.mangoo.routing.bindings.Request;
public class MyController {
    public Response parse(Request request) {
        String body = request.getBody();
        ...
    }
}
JSON Output
Consider the following POJO:
package models;
public class Person {
    private String firstname;
    private String lastname;
    private int age;
    public Person(String firstname, String lastname, int age) {
        this.firstname = firstname;
        this.lastname = lastname;
        this.age = age;
    }
    public String getFirstname() {
        return firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public int getAge() {
        return age;
    }
}
To create a new Person object and send it as a JSON response:
package controllers;
import io.mangoo.routing.Response;
import models.Person;
public class JsonController {
    public Response render() {
        Person person = new Person("Peter", "Parker", 24);
        return Response.ok().bodyJson(person);
    }
}
JSON Response Output
{
    "firstname": "Peter",
    "lastname": "Parker",
    "age": 24
}