gpt4 book ai didi

java - 为什么数字会自动转换为双倍?

转载 作者:行者123 更新时间:2023-12-01 09:26:43 25 4
gpt4 key购买 nike

我使用 Spring Boot 作为我的网络服务。每个方法返回 Map<Object, Object>因为它是通用类型,并且方法能够返回任何响应,无论是原语 intUser 的复杂自定义对象。我还使用了 Map<Object, Object>消除 JSON 中的反斜杠“\”,而不是使用 String。

但是我在客户端(Android 应用程序)中遇到变量转换问题。

long 时,Map 中的数字变量会自动转换为 double (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();
}
});

enter image description here

最佳答案

JSON 是一个 JavaScript 对象。在 JavaScript 中,没有长整型、浮点型或 double 型。一切都是数字,并且在后台都使用了 double。因此,当您发送 JSON 时,除非您明确告诉它将值解释为 long,否则它必须假设它可以是任何有效的数字 - 它必须假设它是 double 。

关于java - 为什么数字会自动转换为双倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com