[英]Why is a number casted automatically to double?
我將spring boot用於我的Web服務。 每個方法都返回Map<Object, Object>
因為它是通用類型,並且這些方法能夠返回任何響應,無論是原始int
還是User
復雜自定義對象。 我還使用Map<Object, Object>
在JSON中消除了反斜杠“ \\”,而不是使用String。
但是我在客戶端(Android應用)中進行變量強制轉換時遇到問題。
服務器中long
Map中的數字變量會自動轉換為雙精度(1.0、2.0、3.0、5.0等)。
如果我在服務器上將數字轉換為字符串,則在客戶端進行轉換是正確的,例如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是JavaScript對象。 在javascript中,沒有long或float或double。 一切都是數字,並且在后台都使用double。 因此,當您發送JSON時,除非您告訴它明確地將一個值解釋為long值,否則它必須假定它可以是任何有效數字-它必須假定它是一個double。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.