【发布时间】:2017-02-08 04:33:08
【问题描述】:
改装电话:
@GET("getUser")
Call<Map<Object,Object>> getUser(@Query("phoneNumber") String phoneNumber, @Query("hash") String hash)
如果返回用户对象,我需要从浏览器返回 json:
{"error":"0","value":[{"id":1,"name":"","phoneNumber":"87472335578","smsCode":497797,"smsCodeDate":1475160867,"hash":"76dcc911e14f997189243f3370080e62","roles":[{"id":2,"name":"ROLE_USER"}]}]}
如果返回错误,则从浏览器返回json:
{"error":"-1"}
android 中的回调响应
对于这个问题
我使用Map<Object,Object> 来处理不同的 JSON 结构。但问题在于数字的转换。我需要 int 或 long 而 java 将其视为 double 值。我可以使用一些解析方法。但如果 Map 中有很多变量,那将是一件很糟糕的工作。
我不能使用Map<String,String>然后解析它,因为Gson不想处理它。有反斜杠。当然,删除它们是显而易见的,但我想找到优雅的方式来处理 JSON。
服务器端json生成器代码
public final static String SUCCESS = "0";
public final static String NOT_FOUND = "-1";
Map<Object, Object> m = new HashMap<>();
@RequestMapping("/getUser")
Map<Object, Object> getUser(@RequestParam(value = "phoneNumber", defaultValue = "") String phoneNumber,
@RequestParam(value = "hash", defaultValue = "") String hash) {
m.clear();
User user = userRepository.findByPhoneNumberAndHash(phoneNumber, hash);
if (user != null) {
m.put(ERROR_JSON, SUCCESS);
m.put(VALUE_JSON, String.valueOf(user));
} else {
m.put(ERROR_JSON, NOT_FOUND);
}
return m;
}
上面的方法返回这个json:
{"error":"0","value":[{\"id\":\"1\",\"name\":\"\",\"phoneNumber\":\"87472335578\",\"smsCode\":497797,\"smsCodeDate\":1475160867,\"hash\":\"76dcc911e14f997189243f3370080e62\",\"roles\":[{\"id":2,\"name\":\"ROLE_USER\"}]}]}
【问题讨论】:
标签: json object type-conversion retrofit2 android gson