public class JsonTemplate {
    // Constructor:
    public JsonTemplate(HttpClient client, ObjectMapper mapper);
    // Getters:
    public HttpClient getClient();
    // GET methods:
    public <T> JsonResp<T> GET(String url, Class<T> clazz, boolean envelope);
    public <T> JsonResp<T> GET(   URI uri, Class<T> clazz, boolean envelope);
    // POST methods:
    public <T> JsonResp<T> POST(String url, Object body, Class<T> clazz, boolean envelope);
    public <T> JsonResp<T> POST(   URI uri, Object body, Class<T> clazz, boolean envelope);
    // PUT methods:
    public <T> JsonResp<T> PUT(String url, Object body, Class<T> clazz, boolean envelope);
    public <T> JsonResp<T> PUT(   URI uri, Object body, Class<T> clazz, boolean envelope);
    // DELETE methods:
    public <T> JsonResp<T> DELETE(String url, Object body, Class<T> clazz, boolean envelope);
    public <T> JsonResp<T> DELETE(   URI uri, Object body, Class<T> clazz, boolean envelope);
    // Generic send methods:
    public <T> JsonResp<T> send(Request request, Class<T> clazz, boolean envelope);
    public <T> JsonResp<T> send(HttpMethod method, String url, Object body, Class<T> clazz, boolean envelope);
    // Parsing method:
    public <T> JsonResp<T> fromJson(ContentResponse resp, Class<T> clazz, boolean envelope);
}