Java Mixins和Jackson注释

Java Mixins和Jackson注释,java,jackson,mixins,Java,Jackson,Mixins,我们目前为数据对象提供了一些混合,以便将注释排除在数据对象之外。比如说 public class SomeDataObj { private int a; public int getA() { return this.a; } public void setA(final int a) { this.a = a; } } public interface SomeDataObjMixin { @JacksonXmlElementWrapper(useWra

我们目前为数据对象提供了一些混合,以便将注释排除在数据对象之外。比如说

public class SomeDataObj {
    private int a;

    public int getA() { return this.a; }

    public void setA(final int a) { this.a = a; }
}

public interface SomeDataObjMixin {
    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "A")
    int getA();

    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "A")
    void setA(int a);
}
然后在我们的对象映射器类中

import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class OurXmlMapper extends XmlMapper {


    public OurXmlMapper(final ConfigurableCaseStrategy caseStrategy) {
        setPropertyNamingStrategy(caseStrategy);
        setSerializationInclusion(Include.NON_NULL);

        //yadda yadda

        addMixin(SomeDataObj.class, SomeDataObjMixin.class);

        // etc etc

}
但是,出于各种原因,我想在数据对象的私有字段中添加一个新的注释,而不是getter或setter。有没有办法通过混入来维持这种分离?我尝试创建一个基本类作为mixin(而不是接口),并使用
新的注释。这并没有达到我想要的。有什么想法吗?

使用混凝土类作为混合工

// ******************* Item class *******************
public class Item {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

// ******************* ItemMixIn class *******************
@JacksonXmlRootElement(localName = "item-class")
public class ItemMixIn {

    @JacksonXmlProperty(localName = "firstName")
    private String name;

}

// ******************* test method *******************
public void test() throws Exception {

    ObjectMapper mapper = new XmlMapper();
    mapper.addMixIn(Item.class, ItemMixIn.class);

    Item item = new Item();
    item.setName("hemant");

    String res = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(item);
    System.out.println(res);
}
输出:

<item-class>
  <firstName>hemant</firstName>
</item-class>

赫曼特

我有杰克逊版本2.9.5

谢谢。我从问起就意识到了一些事情,这使得我的问题变得毫无用处。