Java 使用Gson如何添加变量名作为REST调用的json的顶级参数
我尝试调用REST服务,并使用gson为以下JavaPOJO获取以下json pojoJava 使用Gson如何添加变量名作为REST调用的json的顶级参数,java,json,rest,gson,Java,Json,Rest,Gson,我尝试调用REST服务,并使用gson为以下JavaPOJO获取以下json pojo public class AlphaParameters { private int one; private int two; private int three; //getter setters //constructors } Json {"one":4, "two":5, "three":10 } 我正在使用以下代码 Gson gson = new Gson() AlphaParameter
public class AlphaParameters {
private int one;
private int two;
private int three;
//getter setters
//constructors
}
Json
{"one":4,
"two":5,
"three":10
}
我正在使用以下代码
Gson gson = new Gson()
AlphaParameters alphaParameters = new AlphaParameters(one,two,three);
gson.toJson(alphaParameters );
以前这段代码是可以工作的,但现在看来.net上的服务器端更改了它们的实现,现在它们希望json采用以下格式。一切都是一样的,但现在他们似乎想要json中的顶级变量名
{"alphaParameters":
{"one":4,
"two":5,
"three":10
}
}
问题:是否有Gson的特定api,我可以在不重构代码的情况下使用它生成上述json?
或者编写一个包含alphaParameters的包装类将是一个更好的方法。
(我必须为后者编写大量样板代码)
谢谢您的帮助。我认为Gson本身不允许这种序列化,但是有很多方法可以解决这个问题,而无需创建包装器类 在我的评论中,我建议将对象放在一个映射中,但这有点奇怪,您可以这样做,使它在代码中看起来更明显,并且可能执行得更好
public Gson wrapJson(Object objectToSerialize) {
Gson gson = new Gson();
JsonObject result = new JsonObject();
//Obtain a serialized version of your object
JsonElement jsonElement = gson.toJsonTree(objectToSerialize);
result.add(objectToSerialize.getClass().getSimpleName(), jsonElement);
return result;
}
然后你可以这样使用它:
AlphaParameters alphaParameters = new AlphaParameters(one,two,three);
wrapJson(alphaParameters);
这允许您在任何情况下使用一个非常通用的方法,而无需编写样板类
我使用了类名来生成密钥,但可以随意修改,因为它适合您。您可以将键名作为参数传递,以使此包装实用程序更灵活。您可以在序列化之前将
AlphaParameters
实例放在映射中的AlphaParameters
键下。你的情况可能吗?也可以通过从正确配置的服务器获取来更改Gson
的行为,但我不确定这部分。我在谷歌上搜索了GsonBuilder设置,但目前为止运气不佳:(