示例:
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+
}