java 如何从输出字符串中删除POJO类名?

3okqufwl  于 7个月前  发布在  Java
关注(0)|答案(3)|浏览(101)

下面是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;

}

字符串
查询获取人员信息

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类名?(如所需输出中所示)

bakd9h0s

bakd9h0s1#

我的解决方案

package com.company;

import lombok.Data;

public class Main {

    @Data
    public static class Person {

        private int id;

        private String name;

        private Integer age;

        private Boolean isEmployed;

        private String address;

    }

    public static String getClassName(Class clazz){
        if(clazz.getDeclaringClass() == null)
        {
            return clazz.getSimpleName();
        }
        return getClassName(clazz.getDeclaringClass()) + "." + clazz.getSimpleName(); //Recursive - complete class name.
    }

    public static String toStringRemovingClassName(Object obj)
    {
        String pattern = String.format("^%s\\(|\\)$", getClassName(obj.getClass())); //Matches "<ClassName>(" at begin or ")" at end.
        return obj.toString().replaceAll(pattern, "");
    }

    public static void main(String[] args) {
        var person = new Person();
        System.out.println("personInfo = " + toStringRemovingClassName(person));
        person.id = 1;
        person.address = "\"952 NW 80th St, Miami, FL 33150\"";
        person.name = "Jeff";
        person.age = 30;
        person.isEmployed = true;

        System.out.println("personInfo = " + toStringRemovingClassName(person));
    }
}

字符串

输出

personInfo = id=0, name=null, age=null, isEmployed=null, address=null
personInfo = id=1, name=Jeff, age=30, isEmployed=true, address="952 NW 80th St, Miami, FL 33150"


的数据

ddhy6vgd

ddhy6vgd2#

你需要在你的POJO类中overridetoString()方法,如下所示:

@Data
    public class Person {
        public int id;
        public String name;
        public Integer age;
        public Boolean isEmployed;
        public String address;

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

字符串

mfpqipee

mfpqipee3#

可以使用Apache commons-lang3库的org.apache.commons.lang3.builder.ToStringBuilder功能,并指定一个没有类名的样式,例如。

@Override
public String toString() {
  return new ToStringBuilder(this, ToStringStyle.NO_CLASS_NAME_STYLE)
           .append("id", id)
           .append("name", name)
           .append("age", age)
           .toString()
}

字符串
输出:[id=1,name=John,age=20]

相关问题