有 Java 编程相关的问题?

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

java如何使用JSONB在没有setter的情况下解组/反序列化集合

我喜欢写我的POJO,不需要为集合设置setter

public class Parent {
    private List<Child> children;
    public List<Child> getChildren() {
        if (children == null) {
            children = new ArrayList<Child>();
        }
        return children;
    }
}

// use case example
public class ParentDecorator {
    private final Parent parent;
    public ParentDecorator(Parent parent) {
        this.parent = parent;
    }
    public void addAll(List<Child> children) {
        parent.getChildren().addAll(children);
    }
}

JSON-B序列化工作正常,但反序列化不起作用,因为没有用于子级的setter

问题:我应该如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    亚当·边写了一篇很好的文章,我认为这篇文章可以解决这个问题。其想法是为私有字段实现一个自定义PropertyVisibilityStrategy。不幸的是,由于某种原因,它在我的情况下不起作用

    我对Adam的代码做了一个小小的修改,也修改了方法使其可见。现在我的收藏被反序列化了

    /**
     * JSON-B visibility strategy for deserialization.
     * 
     * Enables JSON binding of private fields without a setter.
     */
    public class JsonDeserializationStrategy implements PropertyVisibilityStrategy {
    
        @Override
        public boolean isVisible(Field field) {
            return true;
        }
    
        @Override
        public boolean isVisible(Method method) {
            return true;
        }
    }
    

    正如名称所示,我只使用这个PropertyVisibilityStrategy进行反序列化。序列化使用默认配置完成