如何将javabean转换为post-param字符串



示例:

public class User{
    private String name;
    private String age;
    private String address;
    .... set and get methods....
}
User user = new User();
user.setName("albert");
user.setAge("22");

我想将用户对象转换为此字符串
name=albert&address=&age=22
因为我使用new URL()发布这个字符串。

我有很多其他对象要转换为像这个字符串一样的对象,所以我想要一个工具方法
有什么好办法吗?

提前感谢

对任何对象类型使用反射:

import java.lang.reflect.Field;
public class ObjectToPostStringbyReflection {

    public String getPostParamString(Object o) throws IllegalArgumentException, IllegalAccessException{
        Class<? extends Object> clazz = o.getClass();
        StringBuilder sb = new StringBuilder();
        for(Field f : clazz.getDeclaredFields()){
            f.setAccessible(true);
            if(!sb.toString().isEmpty()){
                sb.append("&");
            }
            sb.append(f.getName())
                .append("=")
                .append(f.get(o));
        }
        return sb.toString();
    }
    /**
     * @param args
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     */
    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
        // TODO Auto-generated method stub
        User user = new User();
        user.setName("John");
        user.setAddress("address");
        user.setAge("18");
        ObjectToPostStringbyReflection reflector = new ObjectToPostStringbyReflection();
        System.out.println(reflector.getPostParamString(user));
    }
}

结果:name=John&年龄=18&address=地址

你可以试着找到一个框架来为你做这件事(例如Spring(,或者你可以咬紧牙关写自己的方法:

public String toPost() {
    StringBuilder sb = new StringBuilder();
    sb.append("name=")
      .append(this.name)
      .append("&address=")
      .append(this.address)
      .append("&age=")
      .append(this.age);
    return sb.toString();
}

一个简单的方法是:

public class user{
    private String name;
    private String age;
    private String address;
    .... set and get methods....
    public String toText() {
    return "name="+this.name+"&adress="+this.adress+"&age="+this.age;
    }
}

如果性能很重要,您可以使用StringBuilder

String postString = "name="+user.name+"&address="+user.address+"&age="+user.age;

没有任何方法可以做到这一点。它可能是你最好的选择!

如果您想通过查询String by Rest将对象转换为pass。这是不可能的,但如果您在使用toString((方法时只想返回该字符串。您需要覆盖类中的toString方法。比如:

@Override public String toString() { return "name="+ name + "&address=" +adress+ "&age=" +age+ }

最新更新