我想通过xml将Date(ActionScript 3)转换为java.util.Date。
首先,编写一个像这样的用户定义的ActionScript类。
public class User
{
public function User()
{
userDate = new Date();
}
public var id:String = null;
public var password:String = null;
public var userDate:Date = null;
}
其次,创建其实例并设置每个值,因此它将ActionScript类转换为xml,以便使用具有其模式文件的XMLEncoder。
这是结果xml,并将此xml发送到服务器以使用HTTPService。
<User>
<id>system</id>
<password>manager</password>
<userDate>Fri Jan 14 09:02:17 GMT+0900 2011</userDate>
</User>
最后,在Java的服务器端,我想将这个xml转换为这样的Java类,以便使用JAXB Unmarshaller。
public class User {
public User() {
}
private String id;
private String password;
private Date userDate;
public void setId(String id) {
this.id = id;
}
public void setPassword(String password) {
this.password = password;
}
public void setUserDate(Date userDate) {
this.userDate = userDate;
}
public String getId() {
return id;
}
public String getPassword() {
return password;
}
public Date getUserDate() {
return userDate;
}
}
但是,结果,“UserDate”属性只会为null ...
为什么“UserDate”属性为空? 如果有的话,请告诉我解决方案。
答案 0 :(得分:1)
Flash Date
和java.util.Date
的文字表示可能不兼容。由于两个日期对象在内部基于自1970年1月1日以来的毫秒数,我建议在AS3中使用date.time
来获取日期的整数值,将其发送到Java,然后使用{{1}设置正确的日期。
答案 1 :(得分:1)
您可以使用XmlAdapter来完成此任务:
package example;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class DateAdapter extends XmlAdapter<String, Date> {
private SimpleDateFormat format = new SimpleDateFormat("EEE MMM d HH:mm:ss zZ yyyy");
@Override
public Date unmarshal(String v) throws Exception {
System.out.println(format.parse(v));
return format.parse(v);
}
@Override
public String marshal(Date v) throws Exception {
return format.format(v);
}
}
然后在User类的userDate属性上指定此XmlAdapter:
package example;
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement(name="User")
public class User {
private String id;
private String password;
private Date userDate;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@XmlJavaTypeAdapter(DateAdapter.class)
public Date getUserDate() {
return userDate;
}
public void setUserDate(Date userDate) {
this.userDate = userDate;
}
}
有关XmlAdapter的更多信息,请参阅:
<强>更新强>
根据您的注释,如果要将其指定为包级别注释,则需要在与模型类相同的包中包含名为 package-info 的类。这个类看起来像:
@XmlJavaTypeAdapter(value=DateAdapter.class, type=Date.class)
package example;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
如果您想要另一种方法来指定JAXB元数据,您可以使用EclipseLink JAXB(MOXy)中的XML表示扩展,我是技术主管:
或者,您可以确保传递给JAXB的日期采用以下格式(xsd:dateTime):
[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]
答案 2 :(得分:0)
您可能只想查看使用BlazeDS来处理AMF(序列化AS3)和序列化POJO之间的转换工作。
我没有很多使用JAXB解组的经验,但在互联网上发现了这一点。
XML Schema dateTime类型的正确格式是: YYYY-MM-DDTHH:MM:SS
如果您将日期更改为以下内容,您仍会看到错误吗? 2006-02-01T08:00:00
如果你在Flex中,你可以使用DateFormatter,否则你可以在AS3端做一个getter来返回格式正确的日期。 weltraumpirat的回答似乎同样有效。