Android Java Spring JSON响应的密钥为$in。如何解析?

Android Java Spring JSON响应的密钥为$in。如何解析?,java,android,json,spring,Java,Android,Json,Spring,我是Java新手。我使用Spring使用一个输出JSON的RESTAPI。通过Spring网站上的教程,我可以轻松地将JSON响应转换为所需类的对象。现在的问题是JSON响应中的一个键是$id。我无法生成带有美元符号的变量。我假设我应该在某个地方定义一些配置,以便将这样的名称转换为可接受的名称。我不知道怎么做 我的休息请求代码: protected LoginResult doInBackground(Void... params) { try { Log.i(TAG,

我是Java新手。我使用Spring使用一个输出JSON的RESTAPI。通过Spring网站上的教程,我可以轻松地将JSON响应转换为所需类的对象。现在的问题是JSON响应中的一个键是
$id
。我无法生成带有美元符号的变量。我假设我应该在某个地方定义一些配置,以便将这样的名称转换为可接受的名称。我不知道怎么做

我的休息请求代码:

protected LoginResult doInBackground(Void... params) {
    try {
        Log.i(TAG, "Making Login request");
        //TODO: Make this a setting
        final String url = "https://someurl.com/api/login";

        LoginCredentials login = new LoginCredentials("foo@bar.com", "qwerty123");

        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

        LoginResult result = restTemplate.postForObject(url, login, LoginResult.class);

        Log.d(TAG, "Got the LoginResult.");
        return result;
    } catch (Exception e) {
        //TODO: Exception handling
        Log.e(TAG, e.getMessage(), e);
    }

    return null;
}
生成的JSON如下所示:

{
   "_id":{
      "$id":"98765432"
   },
   "name":"Person Guy",
   "email":"foo@bar.com",
   "roles":[
      "user"
   ],
   "active":true,
   "created":{
      "sec":1439117849,
      "usec":856000
   },
   "session":{
      "token":"12345678",
      "user_id":"98765432",
      "created":{
         "sec":1439134272,
         "usec":0
      },
      "last_extended":{
         "sec":1439134272,
         "usec":0
      },
      "expires":{
         "sec":1439998272,
         "usec":0
      }
   }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class LoginResult {
    private String name;
    private String email;
    private MongoId _id;
    /* Getters and setters */
}
$id
部分是事情变得困难的地方。LoginResult类如下所示:

{
   "_id":{
      "$id":"98765432"
   },
   "name":"Person Guy",
   "email":"foo@bar.com",
   "roles":[
      "user"
   ],
   "active":true,
   "created":{
      "sec":1439117849,
      "usec":856000
   },
   "session":{
      "token":"12345678",
      "user_id":"98765432",
      "created":{
         "sec":1439134272,
         "usec":0
      },
      "last_extended":{
         "sec":1439134272,
         "usec":0
      },
      "expires":{
         "sec":1439998272,
         "usec":0
      }
   }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class LoginResult {
    private String name;
    private String email;
    private MongoId _id;
    /* Getters and setters */
}
MongoId类如下所示(现在添加了
JsonIgnoreProperties
以避免异常):


非常感谢您的帮助。

您可以使用
MongoId
中的
@JsonProperty(“$id”)
注释来说明JSON是如何映射到您的Java对象的:

@JsonIgnoreProperties(ignoreUnknown = true)
public class MongoId {
    @JsonProperty("$id") 
    private String id; //This is $id in the JSON response.

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

这是一个供参考的示例。

我怀疑$是否有问题。@Garry在Android Studio中使用$in变量会给我带来各种各样的错误。另外,Java似乎不鼓励在文档中的变量中使用$符号,这非常有效。额外问题:我能用这个在更深层次上确定一个价值目标吗?像
@JsonProperty(“session/token”)
?我不确定这是否可以通过简单的注释实现。您可能必须使用自定义反序列化程序。例如,请参见