我正在使用AndroidAnnotations为Android应用程序构建Rest。 在Serverside上使用PHP,它发送一个类似于json的json:
{"tag":"register","success":0,"error":2,"msg":"User already existed","body":[]}
我有两个POJOS:
User.java:
public class User implements Serializable {
private String name;
private String email;
private String password;
//getter and setter Methods
}
Response.java:
public class RegistrationResponse implements Serializable {
private String tag;
private int success;
private int error;
private String msg;
private String body;
//getter and setter Methods
}
休息客户:
@Rest(rootUrl = "http://my.domain.com", converters = {
MappingJacksonHttpMessageConverter.class,
StringHttpMessageConverter.class, GsonHttpMessageConverter.class }, interceptors = { MyInterceptor.class })
public interface RestClient extends RestClientErrorHandling {
@Post("/user/register/{name}/{email}/{pass}")
@Accept(MediaType.APPLICATION_JSON_VALUE)
Response sendUserRegistration(User user, String name, String email,
String pass);
RestTemplate getRestTemplate();
}
Activity.java:
//User and Response are POJOs
Response result = RestClient.sendUserRegistration(user,
user.getName(),user.getEmail(),user.getPassword());
但是我在Activity.java上遇到了 Null Pointer Exception错误。但是,如果我将“sendUserRegistration”函数的返回值更改为字符串,则所有工作都可以。所以我的“响应”POJO 似乎不会从AndroidAnnotations转换。
如何使用AndroidAnnotations将Rest响应转换为“Response”-POJO ?
答案 0 :(得分:0)
AA依靠Spring Android RestTemplate进行其余调用。并且为了构建请求并处理响应,这个lib使用转换器。要知道RestTemplate应该使用哪个转换器,它会检查content-type
响应头。
由于MappingJacksonHttpMessageConverter
和GsonHttpMessageConverter
仅处理带有content-type=application/json
的http响应,并且您的结果转换为字符串,我很确定您忘记在php服务器中设置此标头。因此它发送默认值(即:text/plain
),只能由StringHttpMessageConverter
处理。
此外,body
字段是json示例中的对象,但在您的POJO中,您将其声明为String。因此,在这一点上解析将失败。
答案 1 :(得分:0)
每次休息调用都不需要返回整个响应对象,只需将响应设置为自定义对象即可。或者您也可以返回一个JsonObject并稍后使用gson进行转换。
@Rest(rootUrl = "http://my.domain.com", converters = {
MappingJacksonHttpMessageConverter.class,
StringHttpMessageConverter.class, GsonHttpMessageConverter.class }, interceptors = { MyInterceptor.class })
public interface RestClient extends RestClientErrorHandling {
@Post("/user/register/{name}/{email}/{pass}")
@Accept(MediaType.APPLICATION_JSON_VALUE)
User sendUserRegistration(User user, String name, String email,
String pass);
RestTemplate getRestTemplate();
}
然后只需致电
User newUser = RestClient.sendUserRegistration(user,
user.getName(),user.getEmail(),user.getPassword());