【问题标题】:Mapping XMLGregorianCalendar via Dozer通过 Dozer 映射 XMLGregorianCalendar
【发布时间】:2015-02-17 06:08:00
【问题描述】:

我正在尝试映射两个属性,都是 XMLGregorianCalendar 类型。试图通过推土机来实现这一点,值正在被映射,但得到如下奇怪的日期时间值

XML 输入

 <urn1:ReservationDate>2015-02-11</urn1:ReservationDate>
 <urn1:ReservationTime>03:28:00</urn1:ReservationTime>

以 JSON 格式输出

 "reservationDate": 1423593000000,
  "reservationTime": -7320000

我的推土机映射如下

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net
          http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <configuration>
        <stop-on-errors>true</stop-on-errors>
        <date-format>MM/dd/yyyy HH:mm</date-format>
        <!-- <date-format>MM-dd-yyyy</date-format> -->
        <wildcard>true</wildcard>
        <custom-converters>
        <converter type="com.xxx.util.XMLGC2XMLGC">
        <class-a>javax.xml.datatype.XMLGregorianCalendar</class-a>
        <class-b>javax.xml.datatype.XMLGregorianCalendar</class-b>
        </converter>
        </custom-converters>
    </configuration>

    <mapping>
        <class-a>com.xxx..ReservationType
        </class-a>
        <class-b>com.xxx..ReservationDto
        </class-b>
        <field>
            <a>pnrLocator</a>
            <b>pnrLocator</b>
        </field>
        <field>
            <a>reservationDate</a>
            <b>reservationDate</b>
            <a-hint>java.util.GregorianCalendar</a-hint>
        </field>
    </mapping>
</mappings> 

XMLGC2XMLGC类代码

public class XMLGC2XMLGC extends
DozerConverter<XMLGregorianCalendar, XMLGregorianCalendar> {
    public XMLGC2XMLGC() {
        super(XMLGregorianCalendar.class, XMLGregorianCalendar.class);
    }
    @Override
    public XMLGregorianCalendar convertFrom(XMLGregorianCalendar src,
            XMLGregorianCalendar dest) {
        return src;
    }
    @Override
    public XMLGregorianCalendar convertTo(XMLGregorianCalendar src,
            XMLGregorianCalendar dest) {
        return dest;
    } 

我什至尝试将 Date 转换为 XMLGregorianCalendar,因为我阅读了一些说明它应该自动发生的文档,但是在执行相同操作时我遇到了这样的异常

java.lang.IllegalAccessException:类 org.dozer.util.ReflectionUtils 无法使用修饰符“public”访问 org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl 类的成员

请帮忙

【问题讨论】:

    标签: date calendar mapping dozer


    【解决方案1】:

    这里的问题在于 JSON 序列化。 我必须编写一个自定义序列化程序以在 JSON 中正确显示 XMLGregorianCalendar 日期

    代码如下

    public class CustomDateSerializer extends JsonSerializer<XMLGregorianCalendar> {    
        @Override
        public void serialize(XMLGregorianCalendar value, JsonGenerator gen, SerializerProvider arg2) throws 
            IOException, JsonProcessingException {      
    
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            String formattedDate = formatter.format(value.toGregorianCalendar().getTime());
            gen.writeString(formattedDate);
    
        }
    }
    

    并将相应的字段注释如下

    @JsonSerialize(using = CustomDateSerializer.class)
        private XMLGregorianCalendar reservationDate;
    

    这足以在 JSON 中获得正确的日期格式:)

    希望这对某人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多