2016-07-14 76 views
0

我是新来的Android注释,我有一个关于AA api.Here的REST客户端实现多个困惑是我的代码我使用:解析JSON响应REST的Android

@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注释的主要区别是什么?

在此先感谢

+0

我建议使用名为retrofit2的库。它会简化你的生活。不需要解析json响应,也不需要认真思考异步请求。 – faruk

+0

虽然搜索我见过很多人建议retrofit2,但也是老实说,我没有发现这两个库之间的很大区别,但仍然可以给你容易理解,并遵循retrofit2的教程,所以我可以检查? –

回答

0
@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); 
} 

的响应将被解析成你与杰克逊在这种情况下类。

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

+0

你能给出任何关于'YourResponseClass'的例子,如果我必须创建这个类,那么它的样板文件w.r.t会给出响应,如果是的话,那么我是否需要为每种不同类型的响应创建新的响应类? –

+0

是的,有时候一些请求可以给出相同的响应json结构,但有时它不是。 – faruk

+0

这是一个非常糟糕的设计。然后你必须动态地处理响应。或者,也许你可以尝试一个多态反序列化,如果它适合的话:http://wiki.fasterxml.com/JacksonPolymorphicDeserialization – WonderCsabo