有没有办法改变jaxb序列化/反序列化类型的默认方式,在我的情况下的日期,而不是通过注释和/或通过xml jaxb绑定指定它,如 http://jaxb.java.net/guide/Using_different_datatypes.html
我基本上喜欢做类似的事情:
JAXBContext jaxbContext = ...;
Marshaller marshaller = jaxbContext.createMarshaller().setAdapter(new DateAdapter(dateFormat));
Run Code Online (Sandbox Code Playgroud)
要有一个预配置的JaxBContext或Marshaller/Unmarshaller,它以自定义方式序列化/反序列化日期.
找不到任何显示如何通过注释或静态使用xml绑定文件的资源..谢谢!
Pat*_*iak 14
这不是您正在寻找的,但它可以单独注释每个Date字段.您可以在包级别设置XmlJavaTypeAdapter,以便包中对Date的每个引用都将使用它.如果您的对象位于com.example包中,则应使用以下内容向其中添加package-info.java文件:
@XmlJavaTypeAdapter(value=MyCustomDateAdapter.class,type=Date.class)
package com.example;
Run Code Online (Sandbox Code Playgroud)
试试这个:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement(name = "event")
public class Event {
private Date date;
private String description;
@XmlJavaTypeAdapter(DateFormatterAdapter.class)
public Date getDate() {
return date;
}
public void setDate(final Date date) {
this.date = date;
}
public String getDescription() {
return description;
}
public void setDescription(final String description) {
this.description = description;
}
private static class DateFormatterAdapter extends XmlAdapter<String, Date> {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("dd_mm_yyyy");
@Override
public Date unmarshal(final String v) throws Exception {
return dateFormat.parse(v);
}
@Override
public String marshal(final Date v) throws Exception {
return dateFormat.format(v);
}
}
public static void main(final String[] args) throws Exception {
final JAXBContext context = JAXBContext.newInstance(Event.class);
final Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
final Event event = new Event();
event.setDate(new Date());
event.setDescription("im rick james");
marshaller.marshal(event, System.out);
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<event>
<date>16_05_2011</date>
<description>im rick james</description>
</event>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18336 次 |
| 最近记录: |