【问题标题】:Parse JSON Response REST android解析 JSON 响应 REST android
【发布时间】:2016-07-14 13:19:45
【问题描述】:

我是 android 注释的新手,我对 AA api 的 REST 客户端实现有很多困惑。这是我正在使用的代码:

@Rest(rootUrl = "http://something.com", converters = {MappingJackson2HttpMessageConverter.class})

public // if defined, the url will be added as a prefix to every request
interface RESTClient extends RestClientHeaders {
    @Post("/isec/api/user/login ")
    @Accept(MediaType.APPLICATION_JSON)
    void LoginUser(@Field String email,@Field String password,@Field String type);
}

预期的 JSON 响应是:

{
"status": false
"message": "Verify your account to continue"
"verified": "n"
"type": "STUDENT"
"apikey": "4o0k8sg4g8ckkswskkowcog80gog4gso0g00kogo"
}

现在我的问题是:

1 - 我在哪个变量中得到响应 JSON

2 - 解析我的响应JSON 的最佳方法是什么,因为我在同一 URL 的不同参数上得到不同的响应,所以我无法创建一个类来处理响应?

3 - @Path@field 注释的主要区别是什么?

提前致谢

【问题讨论】:

  • 我建议使用名为 retrofit2 的库。它会简化你的生活。不需要解析json响应,也不需要去想异步请求。
  • 在搜索时我看到很多人建议改造2,但老实说,我没有发现这两个库之间有太大区别,但你仍然可以提供易于理解和遵循的教程改造2,所以我可以检查一下?

标签: java android json rest android-annotations


【解决方案1】:
@Rest(rootUrl = "http://something.com", converters = {MappingJackson2HttpMessageConverter.class})

public // if defined, the url will be added as a prefix to every request
interface RESTClient extends RestClientHeaders {
    @Post("/isec/api/user/login ")
    @Accept(MediaType.APPLICATION_JSON)
    YourResponseClass LoginUser(@Field String email,@Field String password,@Field String type);
}

在这种情况下,响应将被解析到您使用 Jackson 的班级中。

@Path 用于 url 变量,@Field 用于表单输入。第一个被替换到 URL 中,第二个作为表单 url 编码参数添加到请求正文中。请阅读 wiki,它有详细的示例。

【讨论】:

  • 你能举出任何关于YourResponseClass的例子吗,如果我必须创建这个类,它的样板会是什么给定的响应,如果是这样,那么我是否必须为每种不同类型的回应?
  • 是的,有时几个请求可以给出相同的响应 json 结构,但有时不是。
  • 那是一个非常糟糕的设计。然后你必须动态处理响应。或者,如果适合这种情况,您可以尝试多态反序列化:wiki.fasterxml.com/JacksonPolymorphicDeserialization
  • 我觉得对于初学者来说有点难以消化。
猜你喜欢
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
相关资源
最近更新 更多