有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有办法创建以键为大写的JSON对象?

项目:使用REST web服务的Android应用程序
使用:
客户端截击
服务器API-泽西岛
转换器:Gson

这是我第一次在这里问一个问题,我将提供我的方式来“规避”这个代码约定。由于我正在从事一个项目,其中POJO字段已经被定义为大写(遗憾的是,我无法改变这一点),因此我必须找到一种方法来修复JSON字符串,并将其转换为大写POJO的实例

因此基本上是:客户POJO<--&燃气轮机;转换为/来自gson的json对象<--&燃气轮机;服务器POJO

那么,假设我在Users.class中有一个字段

String USERNAME;

当Jersey通过@Produces发送一个实例时,它遵循创建JSON的约定并发送一个对象

{"username": "random_name"}

当它通过gson.fromJSON从JSON转换过来时,客户机的POJO实例将获得该字段的空值(显然是因为该字段在JSONObject中是小写的)

这就是我使用解析JSONObject并将每个键作为大写的方法来管理它的方式:

public static String fixJSONObject(JSONObject obj) {
    String jsonString = obj.toString();
    for(int i = 0; i<obj.names().length(); i++){
        try{
      obj.names().getString(i).toUpperCase());
           jsonString=jsonString.replace(obj.names().getString(i),
           obj.names().getString(i).toUpperCase());

        } catch(JSONException e) {
            e.printStackTrace();
        }
    }
    return jsonString;
}

幸运的是,因为gson.fromJSON()需要字符串(而不是JSONObject)作为类之外的参数,所以我设法用这种方式解决了这个问题

所以,我的问题是:有没有什么优雅的方法可以让JSON忽略代码约定并创建一个具有精确字段的JSON对象?在这种情况下:

 {"USERNAME": "random_name"}

共 (2) 个答案

  1. # 1 楼答案

    只需使用注释com.google.gson.annotations.SerializedName 外接程序类Users.java

    @SerializedName("username")
    String USERNAME;
    
  2. # 2 楼答案

    Jersey在内部使用JAXB将bean打包成xml/json。因此,您可以始终使用@XmlElement注释并使用name属性来设置要用于编组的属性名称

    @XmlElement(name="USERNAME")
    String USERNAME;