gpt4 book ai didi

jaxb - Marshall 对象字段作为属性

转载 作者:行者123 更新时间:2023-12-04 02:20:47 25 4
gpt4 key购买 nike

到目前为止,这是我使用 JAXB 编码 POJO 的内容:

@XmlRootElement
public class Local {
private Entity entity;

public void setEntity(Entity entity) {
this.entity = entity;
}

@XmlElement
public Entity getEntity() {
return entity;
}
}

@XmlRootElement
public class Entity {
private String name;
private String comment;

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

@XmlAttribute
public String getName(){
return this.name;
}

public void setComment...

@XmlAttribute
public void getComment...
}

有了这个,我得到了这样的东西:

<local>
<entity name="" comment=""></entity>
</local>

但是,我更愿意将 name 属性作为本地的属性:

<local entityName="" entityComment=""></local>

XmlJavaTypeAdapter 是开始的好方法吗?

谢谢,亚历克斯

最佳答案

有几个不同的选项可以处理这个用例:

选项 #1 - XmlAdapter(任何 JAXB 实现)

对于此用例,您可以使用 XmlAdapter。只要只有一个属性值来自 Entity 对象,这就会起作用:

实体适配器

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class EntityAdapter extends XmlAdapter<String, Entity>{

@Override
public String marshal(Entity entity) throws Exception {
if(null == entity) {
return null;
}
return entity.getName();
}

@Override
public Entity unmarshal(String name) throws Exception {
Entity entity = new Entity();
entity.setName(name);
return entity;
}

}

本地

XmlAdapter 使用 @XmlJavaTypeAdapter 注释与字段/属性链接:

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlRootElement
public class Local {
private Entity entity;

public void setEntity(Entity entity) {
this.entity = entity;
}

@XmlAttribute
@XmlJavaTypeAdapter(EntityAdapter.class)
public Entity getEntity() {
return entity;
}

}

了解更多信息


选项#2 - @XmlPath (EclipseLink JAXB (MOXy)

或者,如果您使用 EclipseLink JAXB (MOXy) ,您可以使用 @XmlPath 扩展名。这对于对应于多个 XML 属性的 Entity 对象很有用:

本地

指定 XPath“.”表明子内容将写入父元素

import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.*;

@XmlRootElement
public class Local {
private Entity entity;

public void setEntity(Entity entity) {
this.entity = entity;
}

@XmlPath(".")
public Entity getEntity() {
return entity;
}
}

实体

public class Entity {
private String name;
private String comment;

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

@XmlAttribute(name="entityName")
public String getName(){
return this.name;
}

public void setComment(String comment){
this.comment = comment;
}

@XmlAttribute(name="entityComment")
public String getComment(){
return this.comment;
}
}

了解更多信息

关于jaxb - Marshall 对象字段作为属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7246165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com