我正在尝试使用Gson的toJson API将我的对象转换为JSON字符串。 当我遇到支持相同的2个不同的API时。
根据文件 -
public String toJson(Object src)
请注意,如果任何对象字段都是泛型类型,则此方法可以正常工作,只是对象本身不应该是泛型类型。 如果对象属于泛型类型,请使用toJson(Object,Type)。
public String toJson(Object src,Type typeOfSrc)
如果指定的对象是泛型类型,则必须使用此方法。
我正在使用第一个API,它只接受Object作为参数,但是传递泛型类型对象,我仍然能够成功获取JSON字符串。
代码:
@GET
@Path("/getList")
@Produces(MediaType.APPLICATION_JSON)
public String getList()
{
Gson gson = new GsonBuilder().create();
List list = new ArrayList();
list.add(new Message("kishore", " Bandi "));
list.add(new Message("test", " values "));
return gson.toJson(list);
}
我得到的XML作为回应:
[
{
"name": "kishore",
"text": " Bandi ",
"dontSend": "Hope not received",
"iAmEmpty": ""
},
{
"name": "test",
"text": " values ",
"dontSend": "Hope not received",
"iAmEmpty": ""
}
]
即使我使用参数化类型,响应也是一样。
Gson gson = new GsonBuilder().create();
List<String> list = new ArrayList<String>();
list.add("Kishore");
list.add("Bandi");
return gson.toJson(list);
输出:
["Kishore","Bandi"]
那么第二个API将type作为参数的重要性是什么?
答案 0 :(得分:2)
在序列化/反序列化toJson(Object src, Type typeOfSrc)
时使用方法ParameterizedType
。
根据docs:
如果您正在序列化/反序列化的对象是 ParameterizedType(即包含至少一个类型参数并且可以 是一个数组)然后你必须使用toJson(对象,类型)或 fromJson(String,Type)方法。
示例(从文档中提取):
Type listType = new TypeToken<List<String>>() {}.getType();
List<String> target = new LinkedList<String>();
target.add("blah");
Gson gson = new Gson();
String json = gson.toJson(target, listType);
List<String> target2 = gson.fromJson(json, listType);
与ParameterizedType
:What is meant by parameterized type?