我使用我的web服务的弹簧引导。每种方法都会返回Map<Object, Object>
,因为它是一种通用类型,并且方法能够返回任何响应,原型为int
或User
的复杂自定义对象。我还使用Map<Object, Object>
来消除JSON中的反斜杠“\”,而不是使用String。为什么数字会自动翻倍?
但我在客户端(Android应用程序)的变量转换出现问题。
在服务器中,Map中的数字变量会被自动转换为双倍(1.0,2.0,3.0,5.0,...),而它是long
。
如果我在服务器上将数字转换为字符串,那么在客户端进行投射就是正确的。 1,2,3,5,......
return String.valueOf(u.getId())
服务器侧可变:
long id;
服务器侧方法:
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, user);
} else {
m.put(ERROR_JSON, NOT_FOUND);
}
return m;
}
JSON:
[{"id":1}] and [{"id":"1"}]
的Android码。改造
userService.getUser(phoneNumber, hash).enqueue(new Callback<Map<Object, Object>>() {
@Override
public void onResponse(Call<Map<Object, Object>> call, Response<Map<Object, Object>> response) {
Map<Object, Object> m = response.body();
}
@Override
public void onFailure(Call<Map<Object, Object>> call, Throwable t) {
t.printStackTrace();
}
});
请提供示例JSON并指出解析这些值的代码。 – Sufian
@Sufian此代码生成Json。 –
您发布的JSON是由服务器还是您的Android应用生成的?你在哪里有这个问题:在服务器或Android应用程序? – Sufian