java unmarshall LocalDateTime error

旧时模样 提交于 2019-12-13 12:34:39

问题


This is my adapter class:

public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {

@Override
public LocalDateTime unmarshal(String v) throws Exception {
    return new LocalDateTime(v);
}

@Override
public String marshal(LocalDateTime v) throws Exception {
    return v.toString();
}

}

and this is an object-class where i want to store the date:

@XmlAccessorType(XmlAccessType.FIELD)
public class Object {

@XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
private LocalDateTime time;

public LocalDateTime getTime() {
        return time;
    }

For some reason, i can't compile it. It shows that the problem is at return new LocalDateTime(v);. And this is the error I get:

    Error:(9, 16) java: constructor LocalDateTime in class java.time.LocalDateTime cannot be applied to given types;
  required: java.time.LocalDate,java.time.LocalTime
  found: java.lang.String
  reason: actual and formal argument lists differ in length

and the xml part:

<time type="dateTime">2000-01-01T19:45:00Z</time>

I'm following this example.


回答1:


Probably you're using LocalDateTime from Java 8. This class has not any constructor for string.

In the example which you're following LocalDateTime is from JodaTime.

So, you can do this in to ways:

  • Import org.joda.time.LocalDateTime (you will need JodaTime dependency) instead of java.time.LocalDateTime;

  • or change unmarshal method to something like this:

    @Override
    public LocalDateTime unmarshal(String v) throws Exception {
        return LocalDateTime.parse(v);
    }
    

You may need to inform the date time format, as the default is a format to 2011-12-03T10:15:30, maybe this:

@Override
public LocalDateTime unmarshal(String v) throws Exception {
    return LocalDateTime.parse(v, DateTimeFormatter.ISO_INSTANT);
}

Also, in java.time.LocalDateTime toString will output one of the following ISO-8601 formats:

  • uuuu-MM-dd'T'HH:mm
  • uuuu-MM-dd'T'HH:mm:ss
  • uuuu-MM-dd'T'HH:mm:ss.SSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS


来源:https://stackoverflow.com/questions/29424551/java-unmarshall-localdatetime-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!