VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 深入浅出 JAXB:自定义映射方式

 

@XmlJavaTypeAdapter 是什么?

@XmlJavaTypeAdapter 注解可以改变内置的映射方式,如格式化日期时间、货币,使用 CDATA 区段代替字符转义等。

 

小试牛刀

下面以格式化日期时间格式为例,了解 @XmlJavaTypeAdapter 的使用。先看看默认的日期时间类型,是如何映射的。定义一个含有 Date 类型字段的 Java 对象:

@XmlRootElement(name = "Book")
@XmlAccessorType(XmlAccessType.FIELD)
@lombok.Data
@lombok.NoArgsConstructor
@lombok.AllArgsConstructor
public class Book {
	@XmlElement(name = "ISBN")
	private String isbn;
	@XmlElement(name = "Title")
	private String title;
	@XmlAttribute(name = "edition")
	private String edition;
	@XmlElement(name = "PublicationDate")
	private Date publicationDate;	
}

编写一段测试代码验证一下。

Book book = new Book();
book.setIsbn("9787508344980");
book.setTitle("Head First Java");
book.setEdition("2nd");
book.setPublicationDate(new Date());		
JAXB.marshal(book, System.out);

执行测试代码,输出的内容如下



    9787508344980Head First Java
    2019-05-05T22:07:04.881+08:00

JAXB 默认将 Date 类型的字段映射成标准的日期时间格式,但对于这个例子,书籍的出版日期仅需表示日期即可。通过继承 XmlAdapter 类,并重写 marshal 和 unmarshal 方法,完成 Date 类型字段在序列化和反序列

public class DateAdapter extends XmlAdapter {
	@Override
	public Date unmarshal(String v) throws Exception {
		return DateUtils.parseDate(v, "yyyy-MM-dd");
	}

	@Override
	public String marshal(Date v) throws Exception {
		return DateFormatUtils.format(v, "yyyy-MM-dd");
	}
}

使用 @XmlJavaTypeAdapter 注解修饰日期类型的字段:

@XmlJavaTypeAdapter(value = DateAdapter.class)
@XmlElement(name = "PublicationDate")
private Date publicationDate;	

再次执行测试代码,输出的内容如下。



    9787508344980Head First Java
    2019-05-05

 

原文链接:https://www.5axxw.com/wenku/yp/1003995z.html

相关教程