如何从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
相关产品推荐
相关产品推荐

