JSON Is The New Data Transfer Object (DTO) 📎
    The JSON processing API comes with
    Java EE 7 and is already integrated with JAX-RS. JsonObject and JsonArray are serialized and deserialized
    by the JAX-RS runtime without any additional effort.
    JsonObject is a  Map<String, JsonValue> and so a generic and dynamic DTO.
Because the entities know their state and also have access to private data, the JSON-mapping happens directly within the domain objects:
    
public class Workshop {
    private String name;
    private int duration;
    public Workshop(String name, int duration) {
        this.name = name;
        this.duration = duration;
    }
    public Workshop(JsonObject input) {
        this.name = input.getString("name");
        this.duration = input.
                getJsonNumber("duration").
                intValue();
    }
    public JsonObject toJson() {
        return Json.createObjectBuilder().
                add("name", this.name).
                add("duration", this.duration).
                build();
    }
}
    
     
    Now the JAX-RS resource class only has to invoke the entities method to map from and to the JsonObject representation:
        
@Stateless
@Path("workshops")
public class WorkshopsResource {
    @Inject
    RegistrationStore store;
    @GET
    public JsonArray all() {
        JsonArrayBuilder list = Json.createArrayBuilder();
        List<Workshop> all = this.store.all();
        all.stream().map(Workshop::toJson).forEach(list::add);
        return list.build();
    }
    @POST
    public void save(JsonObject input) {
        this.store.save(new Workshop(input));
    }
}
        
    
    
    See you at Java EE Microservices. Is Munich's airport too far? Learn from home: javaeemicro.services.