Ubuntu服务器上SpringBoot调用Bitstamps.net API返回对象地址异常求助
嘿,这个问题我之前踩过坑!你看到的那些si.flawless.cryptohunt.model.CryptoCurrentValue@764763e7这类输出,其实是Java对象默认的toString()方法返回值——说白了就是你的CryptoCurrentValue实体类没有被正确序列化成JSON格式,所以才返回了对象的内存地址信息,而不是你想要的加密货币行情数据。
下面是具体的解决步骤:
1. 确保实体类具备序列化所需的条件
JSON序列化框架(比如Spring Boot默认的Jackson)需要通过getter方法来读取对象的属性值,或者借助注解自动生成这些方法。
方案一:用Lombok简化代码(推荐)
如果你的项目已经引入Lombok依赖,直接给CryptoCurrentValue类加上@Data注解,它会自动生成所有属性的getter、setter以及正确的toString()方法:
import lombok.Data; @Data public class CryptoCurrentValue { private String cryptoName; private double currentPrice; private String updateTime; // 其他你需要的行情字段 }
方案二:手动编写getter方法
如果不用Lombok,就给每个属性手动添加public的getter方法(setter建议也加上,方便数据赋值):
public class CryptoCurrentValue { private String cryptoName; private double currentPrice; private String updateTime; // getter方法 public String getCryptoName() { return cryptoName; } public double getCurrentPrice() { return currentPrice; } public String getUpdateTime() { return updateTime; } // setter方法 public void setCryptoName(String cryptoName) { this.cryptoName = cryptoName; } public void setCurrentPrice(double currentPrice) { this.currentPrice = currentPrice; } public void setUpdateTime(String updateTime) { this.updateTime = updateTime; } }
2. 检查字段映射是否正确
如果bitstamps.net返回的JSON字段名和你实体类的属性名不一致,需要用@JsonProperty注解指定映射关系。比如API返回的字段是"crypto_symbol",而你的属性是cryptoName,就这么加:
import com.fasterxml.jackson.annotation.JsonProperty; // ... @JsonProperty("crypto_symbol") private String cryptoName;
3. 确认接口返回类型的处理
在你的Spring Boot接口中,直接返回List<CryptoCurrentValue>或者单个CryptoCurrentValue对象即可,Spring Boot会自动帮你完成JSON序列化:
@GetMapping("/crypto-market-data") public List<CryptoCurrentValue> fetchCryptoData() { // 调用bitstamps.net的API,解析数据到CryptoCurrentValue列表 return cryptoDataService.getBitstampMarketData(); }
本质上,这个问题就是因为序列化框架无法读取到对象的属性值,只能退而求其次调用默认的toString()输出内存地址。按照上面的步骤调整后,应该就能正常返回加密货币的实际行情数据了。
内容的提问来源于stack exchange,提问作者averagejoex

