如何将javabean转换为post param string?

时间:2016-08-25 12:32:12

标签: java

示例:

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()发布此字符串。

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

提前致谢

5 个答案:

答案 0 :(得分:5)

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

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&amp; age = 18&amp; address = address

答案 1 :(得分:1)

您可以尝试找到一个可以为您执行此操作的框架(例如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();
}

答案 2 :(得分:0)

一个简单的方法是:

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

答案 3 :(得分:0)

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

没有。这样做的方法。它可能是你最好选择的!

答案 4 :(得分:0)

如果要将对象转换为通过查询String by Rest传递。它是不可能的,但如果你只想在使用toString()方法时返回该字符串。你需要覆盖你的类中的toString方法。 像那样:

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