有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

json将java对象转换为POJO样式的http参数

我使用的是playframework,有没有办法将java对象转换为Play可识别的pojo参数列表? 例如,我有两个班

public class A{
    B b;
    String room;
}
public class B{
    String name;
}

当我得到一个实例a时,我可以将它更改为两个参数

a.room=myroom&a.b.name=myname

我是否必须通过从该实例转换的json进行传输

非常感谢


共 (1) 个答案

  1. # 1 楼答案

    我编写了一个Util来将对象转换为与jackson一起使用的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。数据绑定

    require:
        - com.fasterxml.jackson.core -> jackson-databind 2.1.0
        - org.apache.commons -> commons-lang3 3.1