java - 使用 Javax @XmlElement 读取属性时如何预处理 xml 字段
问题描述
我在 Spring Boot 项目中有 properties.xml,如下所示:
...
<RestConnect>
<Name>OpenBanking</Name>
<RestEnable>true</RestEnable>
<IP>192.168.11.11</IP>
<Port>3311</Port>
</RestConnect>
...
对应的java文件是:
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class RestConnectProperties {
@XmlElement(name = "Name")
private String name = "Unknown";
@XmlElement(name = "RestEnable")
private boolean restEnable = true;
@XmlElement(name = "IP")
private String ip = "";
@XmlElement(name = "Port")
private String port = "";
public RestConnectProperties() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isRestEnable() {
return restEnable;
}
public void setRestEnable(boolean restEnable) {
this.restEnable = restEnable;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
它将值正确设置到相关字段中。
我想对字段进行预处理。例如,我想检查 IP 是否输入正确,或者我想将“名称”大写,然后将它们设置为对象字段。我该怎么做?
解决方案
是的,将@XmlElement
/@XmlAttribute
注释移动到 getter 方法。
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE) // ONLY PROCESS ANNOTATED FIELDS/PROPERTIES
public class RestConnectProperties {
. . .
// REMOVE THIS: @XmlElement(name = "Name")
private String name = "Unknown";
. . .
@XmlElement(name = "Name") // ADD HERE
public String getName() {
return name;
}
public void setName(String name) {
this.name = name.toUpperCase(); // PROCESS HERE
}
. . .
}
我更喜欢更改@XmlAccessorType
为XmlAccessType.NONE
,因此 JAXB 仅使用显式注释的字段和/或属性 getter/setter 方法。
您当然可以继续使用XmlAccessType.FIELD
,但是您必须添加@XmlTransient
到字段中,因此您可以通过 JAXB 从基于字段的处理切换到基于属性的处理。
推荐阅读
- ssl - 如何在 Go 中建立与 memsql 的基于 ssl 的 tcp 连接
- ruby-on-rails - 调用model.save有什么效果!在 save_change_to_attribute 的 after_create 回调中?在 after_save 回调中?
- rest - 使用 Retry-After 标头响应非 503/3xx
- c++ - 在 C++ 中用于树数据结构的方法链接期间传递的相同地址?
- c++ - 错误:“decltype”之前的预期主表达式
- ios - AppCenter POD:没有这样的文件或目录
- mysql - 在mysql中使用索引字段删除很慢
- ios - Twilio 远程视图 (TVIVideoView) 在接收方为空白
- python - 如何批量剥离单个查询中的所有行?
- vba - 我的用于拆分文本和数字的 vba 代码不起作用