You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除保存/打印JSON时出现的MyObjectSchema前缀?

嗨,这个问题我之前也碰到过!你看到的MyObjectSchema [latitude=45.95472, longitude=13.664836, ...]格式,其实是Java对象默认(或Lombok自动生成)的toString()方法输出结果。而你访问/someData路由能拿到正确JSON,是因为Spring框架用了Jackson这类序列化工具帮你把对象转换成了标准JSON格式,和直接调用toString()完全是两回事。

要去掉这个类名前缀,有两种实用的解决办法:

方法一:重写MyObjectSchema的toString()方法

直接在你的实体类里自定义toString的输出逻辑,让它返回JSON格式的字符串。推荐用Jackson的ObjectMapper来实现,避免手动拼接JSON容易出错的问题:

import com.fasterxml.jackson.databind.ObjectMapper;

public class MyObjectSchema {
    // 你的实体字段:latitude、longitude、timezone、currently等
    
    @Override
    public String toString() {
        try {
            // 用ObjectMapper把当前对象序列化为JSON字符串
            return new ObjectMapper().writeValueAsString(this);
        } catch (Exception e) {
            // 序列化失败时, fallback到默认toString输出
            return super.toString();
        }
    }
}

这样不管是在Eclipse里打印对象,还是把对象写入文件,都会输出标准的JSON格式,再也看不到类名前缀了。

方法二:在打印/保存时手动序列化对象

如果你不想修改实体类的代码,也可以在需要输出的地方,用Spring容器中的ObjectMapper(或者自己实例化)把对象转换成JSON字符串后再操作:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class YourSchedulerComponent {

    @Autowired
    private ObjectMapper objectMapper; // Spring默认会自动配置这个Bean

    @Scheduled(fixedDelayString = "${fixedDelaySchema}", initialDelayString = "${initialDelaySchema}")
    public MyObjectSchema createSchema() {
        MyObjectSchema schema = new MyObjectSchema();
        // 填充schema的业务数据...
        
        // 转换为JSON字符串并打印
        try {
            String jsonOutput = objectMapper.writeValueAsString(schema);
            System.out.println(jsonOutput);
            
            // 如果要保存到文件,直接把jsonOutput写入文件即可
            // Files.write(Paths.get("output.json"), jsonOutput.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return schema;
    }
}

补充说明

你看到的类名前缀,本质是因为你直接调用了对象的toString()方法——如果没有手动重写这个方法,Java会使用Object类的默认实现(格式为类名@哈希值);如果用了Lombok的@Data、@ToString注解,默认生成的toString会是类名 [字段1=值1, 字段2=值2...]的格式,也就是你现在看到的样子。而接口返回JSON是Spring用序列化框架处理的,和toString完全无关,所以才会出现两种不同的输出结果。

内容的提问来源于stack exchange,提问作者xmlParser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:20