搜索整個JAXB的文檔和許多教程後,我沒有找到任何答案它可以配置與XMLAdapter中的硬編碼不同的日期。 我把屬性文件在類路徑中的日期格式,例如: DATEFORMAT = MM-DD-YYYY
現在你XMLAdapter實現雲如下:
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class ConfigurableAdapterForDate extends XmlAdapter<String, Date>{
private static final String FORMAT = "yyyy-mm-dd";
private String formatFromFile = null;
private SimpleDateFormat format = new SimpleDateFormat();
private void setFormatFromFile() throws IOException {
//load property file
Properties prop = new Properties();
InputStream is = this.getClass().getResourceAsStream("<path to your property file>");
prop.load(is);
//get the format from loaded property file
formatFromFile = prop.getPropertyValue("dateFormat");
if(formatFromFile != null) {
format.applyPattern(formatFromFile);
}
else {
format.applyPattern(FORMAT);
}
}
@Override
public Date unmarshal(String v) throws Exception {
this.setFormatFromFile();
return format.parse(v);
}
@Override
public String marshal(Date v) throws Exception {
this.setFormatFromFile();
return format.format(v);
}
}
現在你可以使用@XmlJavaTypeAdapter(ConfigurableAdapterForDate .class)用於您想要序列化/反序列化的日期對象。 一個免費使用彈簧也可以加載屬性文件。以上代碼將相應地配置您的日期。
'javax.xml.bind.Marshaller.setAdapter(XmlAdapter)'不適合你嗎? – lexicore 2011-06-17 06:34:58
不,它不是.. :( – zhk 2011-06-19 10:39:33
@lexicore - 'javax.xml.bind.Marshaller.setAdapter(XmlAdapter)'用於在模型已經配置爲使用'XmlAdapter'時傳入已初始化的'XmlAdapter',並且不要引入'XmlAdapter'。例如,請參閱:http://stackoverflow.com/questions/5319024/using-jaxb-to-cross-reference-xmlids-from-two-xml-files/5327425#5327425 – 2011-06-28 16:02:09