我正在使用 playframework,有没有办法将 java 对象转换为 Play 可识别的 pojo 参数列表?例如我有两节课
public class A{
B b;
String room;
}
public class B{
String name;
}
当我得到一个A实例a时,我可以把它改成两个参数
a.room=myroom&a.b.name=myname
我是否必须遍历从该实例转换的 json?
非常感谢。
我正在使用 playframework,有没有办法将 java 对象转换为 Play 可识别的 pojo 参数列表?例如我有两节课
public class A{
B b;
String room;
}
public class B{
String name;
}
当我得到一个A实例a时,我可以把它改成两个参数
a.room=myroom&a.b.name=myname
我是否必须遍历从该实例转换的 json?
非常感谢。
我用jackson.databind编写了一个Util来将Object转换为playframework友好的参数列表
public static List<MutablePair> getPojoParam(Object base, Object obj, boolean firstLevel) {
List<MutablePair> ret = new ArrayList<MutablePair>();
String realBase = (firstLevel) ? (String) base : ("." + base);
if (obj instanceof Collection) {
int count = 0;
for (Object o : (Collection) obj) {
List<MutablePair> subPair = getPojoParam(base, o, false);
for (MutablePair p : subPair) {
p.left = realBase + "[" + (count++) + "]" + p.left;
ret.add(p);
}
}
} else if (obj instanceof Map) {
Map<Object, Object> map = (Map<Object, Object>) obj;
for (Object k : map.keySet()) {
List<MutablePair> subPair = getPojoParam(k, map.get(k), false);
for (MutablePair p : subPair) {
p.left = realBase + p.left;
ret.add(p);
}
}
} else {
ret.add(new MutablePair(realBase, obj));
}
return ret;
}
用法:
ATest a = new ATest();
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> data = mapper.readValue(new Gson().toJson(a), Map.class);
List<MutablePair> ret = ObjectToPOJO.getPojoParam("source", data, true);
for (MutablePair key : ret) {
System.out.println(key.left + "=" + key.right);
}
我希望它是正确的。
添加依赖项以使用 MutablePair 和 jackson.databind
require:
- com.fasterxml.jackson.core -> jackson-databind 2.1.0
- org.apache.commons -> commons-lang3 3.1