Java JAXB XmlElement注释从字符串转换为int
我通过web服务接收XML,并使用XmlElement注释将XML解析为Java。下面是我如何使用注释的。请让我知道我是否正确使用它们。我对int领域特别感兴趣。它似乎在工作,但我觉得我没有正确使用注释。我看到许多类似于@xmlement(name=“something”type=Integer.class)的示例。XmlJavaTypeAdapter注释中是否也建议使用此类型属性?我为这么多问题道歉,这是我第一次使用XmlElement注释,我想确保我做得正确。提前感谢您的帮助Java JAXB XmlElement注释从字符串转换为int,java,xml,jaxb,annotations,Java,Xml,Jaxb,Annotations,我通过web服务接收XML,并使用XmlElement注释将XML解析为Java。下面是我如何使用注释的。请让我知道我是否正确使用它们。我对int领域特别感兴趣。它似乎在工作,但我觉得我没有正确使用注释。我看到许多类似于@xmlement(name=“something”type=Integer.class)的示例。XmlJavaTypeAdapter注释中是否也建议使用此类型属性?我为这么多问题道歉,这是我第一次使用XmlElement注释,我想确保我做得正确。提前感谢您的帮助 @XmlRoo
@XmlRootElement(name="Person")
public class Person {
@XmlElement(name="FirstName")
public String firstName = "";
@XmlElement(name="LastName")
public String lastName="";
@XmlElement(name="Age")
public int age = 0;
@XmlElement(name="BirthDate")
@XmlJavaTypeAdapter(DateAdapter.class)
public Date birthDate = new Date(0);
}
public class DateAdapter extends XmlAdapter<String, Date> {
private static final DateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd");
@Override
public String marshal(Date date) throws Exception {
return (date == null) ? "" : FORMAT.format(date);
}
@Override
public Date unmarshal(String str) throws Exception {
return FORMAT.parse(str);
}
}
@XmlRootElement(name=“Person”)
公共阶层人士{
@xmlement(name=“FirstName”)
公共字符串firstName=“”;
@xmlement(name=“LastName”)
公共字符串lastName=“”;
@xmlement(name=“Age”)
公共年龄=0;
@xmlement(name=“生日”)
@XmlJavaTypeAdapter(DateAdapter.class)
公共日期出生日期=新日期(0);
}
公共类DateAdapter扩展了XmlAdapter{
私有静态最终日期格式=新的SimpleDataFormat(“yyyy-MM-dd”);
@凌驾
公共字符串封送处理程序(日期)引发异常{
返回(日期==null)?“”:FORMAT.FORMAT(日期);
}
@凌驾
公共日期解组(字符串str)引发异常{
返回格式.parse(str);
}
}
我认为你的解决方案是正确的
但是,如果Age元素可能包含
null
,则可能需要将int
替换为Integer
(您应该检查XSD文件中Person元素的定义(如果它是web服务,您可以在wsdl文件中找到XSD)) 年龄不能为空,但我担心它会被当作一个空标签。这将采用我输入的默认值(0)。如果Age元素的定义至少包含以下属性之一:minOccurs=“1”nillable=“false”它不能为空,并且如果验证xml文件(并且应该验证该文件),验证将引发异常。