All Downloads are FREE. Search and download functionalities are using the official Maven repository.

service.JsonResponse Maven / Gradle / Ivy

package service;

import com.google.gson.*;
import com.google.gson.annotations.Expose;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;

public class JsonResponse {
    @Expose
    public S status = null;

    @Expose
    public R result = null;

    private final Class statusClass;
    private final Class resultClass;

    public JsonResponse(Class statusClass, Class resultClass) {
        this.statusClass = statusClass;
        this.resultClass = resultClass;
    }

    public void fromJSON(String json){
        assert json != null;
        GsonBuilder gsonBuilder = new GsonBuilder();
        Type type = getType();
        JsonResponse response = gsonBuilder.create().fromJson(json, type);
        this.result = response.result;
        this.status = response.status;
    }

    public String toJSON(){
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(JsonResponse.class, new JsonSerializer>() {
            @Override
            public JsonElement serialize(JsonResponse response, Type type, JsonSerializationContext jsonSerializationContext) {
                JsonObject jsonObject = new JsonObject();
                jsonObject.add("status", new Gson().toJsonTree(response.status));
                jsonObject.add("result", new Gson().toJsonTree(response.result));
                return jsonObject;
            }
        });
        return gsonBuilder.create().toJson(this, JsonResponse.class);
    }

    private Type getType() {
        // Type type = new TypeToken>(){}.getType();
        return TypeToken.getParameterized(JsonResponse.class, statusClass, resultClass).getType();
    }
}