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

如何从POJO的toString()输出字符串中移除类名称?

问题描述

我有如下POJO类:

package com.beans.test;

import lombok.Data;

@Data
public class Person {

    private int id;

    private String name;

    private Integer age;

    private Boolean isEmployed;

    private String address;

}

用于获取Person信息的查询代码:

public class testTable {

public Person getPersonInfo(final int id) {

return dsl.select(PERSON_INFO.NAME,
                  PERSON_INFO.AGE,
                  PERSON_INFO.IS_EMPLOYED,
                  PERSON_INFO.ADDRESS)
          .from(PERSON_INFO)
          .where(PERSON_INFO.ID.equals(id))
          .fetchOneInto(Person.class);
}
}

我需要将查询结果以字符串形式打印:

Person person = testTable.getPersonInfo(id);
String personInfo = person.toString();
System.out.println("personInfo = " + personInfo);

当前输出为:

personInfo = Person(name=TestName,age=TestAge,isEmployed=true,address=TestAddress)

期望输出为:

personInfo = name=TestName,age=TestAge,isEmployed=true,address=TestAddress

请问如何从输出字符串中移除POJO类名称,以得到上述期望输出?

解决方案

以下是几种实用的实现方式:

1. 重写toString()方法

直接在Person类中自定义toString逻辑,完全掌控输出格式:

package com.beans.test;

import lombok.Data;

@Data
public class Person {

    private int id;

    private String name;

    private Integer age;

    private Boolean isEmployed;

    private String address;

    @Override
    public String toString() {
        return "name=" + name + ",age=" + age + ",isEmployed=" + isEmployed + ",address=" + address;
    }
}

注:@Data会自动生成toString,但自定义的toString方法会覆盖Lombok生成的版本。

2. 对现有toString结果做字符串截取

如果不想修改POJO类,可以在打印环节对字符串进行处理:

Person person = testTable.getPersonInfo(id);
String personInfo = person.toString();
// 截取括号内的内容,去掉类名和首尾括号
personInfo = personInfo.substring(personInfo.indexOf('(') + 1, personInfo.lastIndexOf(')'));
System.out.println("personInfo = " + personInfo);

这种方式适合临时场景,但如果Lombok生成的toString格式发生变化,可能会失效。

3. 利用Lombok注解自定义输出

通过Lombok的@ToString注解参数,直接指定不输出类名,并筛选需要展示的字段:

package com.beans.test;

import lombok.Data;
import lombok.ToString;

@Data
@ToString(of = {"name", "age", "isEmployed", "address"}, name = "")
public class Person {

    private int id;

    private String name;

    private Integer age;

    private Boolean isEmployed;

    private String address;

}

name = ""会让Lombok生成的toString不包含类名,of参数指定要展示的字段,同时自动排除了id字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:05:23