Java 使用Gson如何添加变量名作为REST调用的json的顶级参数

Java 使用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

我尝试调用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()
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设置,但目前为止运气不佳:(