0

我喜欢编写我的 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 序列化工作正常,但反序列化不起作用,因为没有儿童设置器。

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

4

1 回答 1

0

Adam Bien 写了一篇很好的文章Private Fields Serialization with JSON-B and JAX-RS 2.1 / Java EE 8我认为可以修复它。这个想法是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顾名思义,我只将其用于反序列化。序列化是使用默认配置完成的。

于 2019-03-13T08:51:08.513 回答