package play.mvc.results;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import play.mvc.Http.Request;
import play.mvc.Http.Response;
import play.exceptions.UnexpectedException;
/**
* 200 OK with application/json
*/
public class RenderJson extends Result {
String json;
public RenderJson(Object o) {
json = new Gson().toJson(o);
}
public RenderJson(Object o, Type type) {
json = new Gson().toJson(o, type);
}
public RenderJson(Object o, JsonSerializer<?>... adapters) {
GsonBuilder gson = new GsonBuilder();
for (Object adapter : adapters) {
Type t = getMethod(adapter.getClass(), "serialize").getParameterTypes()[0];
gson.registerTypeAdapter(t, adapter);
}
json = gson.create().toJson(o);
}
public RenderJson(String jsonString) {
json = jsonString;
}
public void apply(Request request, Response response) {
try {
String encoding = getEncoding();
setContentTypeIfNotSet(response, "application/json; charset="+encoding);
response.out.write(json.getBytes(encoding));
} catch (Exception e) {
throw new UnexpectedException(e);
}
}
//
static Method getMethod(Class<?> clazz, String name) {
for (Method m : clazz.getDeclaredMethods()) {
if (m.getName().equals(name)) {
return m;
}
}
return null;
}
}