Pio*_*cki 38 java xml jaxb java-ee-6
我有2个班:
@XmlRootElement
public class A {
private Long id;
private B b;
// setters and getters
}
Run Code Online (Sandbox Code Playgroud)
和
@XmlRootElement
public class B {
private Long id;
private String field1;
private String field2;
// setters and getters
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,如果我改变类的实例A到XML,我将所有的字段(id)和引用B类字段(id,field1,field2)是这样的:
<a>
<id>2</id>
<b>
<id>5</id>
<field1>test1</field1>
<field2>test3</field2>
</b>
</a>
Run Code Online (Sandbox Code Playgroud)
是否可以修改引用类中的哪些字段B包含在类的XML中A?例如,我想说当我转换一个A类的实例时,我只想id从B类(no field1和field2fields)中获取,所以我想得到:
<a>
<id>2</id>
<b>
<id>5</id>
</b>
</a>
Run Code Online (Sandbox Code Playgroud)
我不想永久注释B类(使用@XMLTransient或@XMLElement)来实现它,因为在某些情况下我想按B原样导出整个类(with id,field1和field2.)
我只是不想导出所有这些字段时在B类是从引用A.
这对JAX-B来说是否可行?
Edu*_*Ros 21
默认的JAXB绑定可以在全局范围内或根据需要在使用自定义绑定声明或@XmlTransient在字段上使用时根据需要进行覆盖.
从Baeldung网站,JAXB指南中查看此示例.
Pio*_*cki 13
好的,我想出了一些hacky解决方案:
@XmlRootElement
public class A {
private Long id;
private B b;
// setters and getters
}
Run Code Online (Sandbox Code Playgroud)
我为REST用例提供了一个额外的getter,所以它就像:
@XMLTransient
public B getB() {
return b;
}
@XMLElement(name="b")
public Long getBForREST() {
return b.getId();
}
Run Code Online (Sandbox Code Playgroud)
它产生以下结构:
<a>
<id>2</id>
<b>5</b>
</a>
Run Code Online (Sandbox Code Playgroud)
它与我的目标并不完全相同,因为它对我有用.
我不喜欢这个解决方案 - @XMLExclude({"field1", "field2"})在我看来,这样的东西会更加清晰.
尽管如此 - 现在,它的确有效; 这很难看,但它确实有效.
| 归档时间: |
|
| 查看次数: |
55737 次 |
| 最近记录: |