2013-07-19 3 views
8

Я использую автономный Spring framework, и я хочу реализовать Spring 3.2 @DateTimeFormat (pattern = "dd/mm/yyyy"), но не получая ожидаемого результата.Весна 3.2 Формат даты

Мой фрагмент кода:

@DateTimeFormat(pattern = "dd/mm/yyyy") 
     private Date dob; 


    public void amehotd(){ 

    Calendar cal; 
     cal = Calendar.getInstance(); 
      cal.set (1999, Calendar.AUGUST, 30); 
      this.dob = cal.getTime(); 
      System.out.println(dob)  
    } 

дает следующий результат:

Mon Aug 30 15:08:14 CDT 1999 

, но я ожидал выход как: 30/08/1999

Я хочу осуществить без времени Joda библиотека

+0

Как вы «печатаете» этот вывод? Я спрашиваю, потому что похоже, что аннотация не учитывается вообще. – Ralph

+0

Я бы использовал API [Joda-time] (http://joda-time.sourceforge.net/) (как всегда, я предпочитаю) и, конечно же, не API-интерфейсы времени по умолчанию Java SE. Если вы используете Spring 3.2, вы можете зарегистрировать собственный редактор свойств напрямую с помощью ['@ ControllerAdvice'] (http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework /web/bind/annotation/ControllerAdvice.html), чтобы удовлетворить все, что вам нужно. – Lion

ответ

15

Попробуйте изменить формат:

@DateTimeFormat(pattern = "dd/MM/yyyy") 

MM is for months, mm для минут.

Только посмотрите на эту documentation:

The most common ISO DateTime Format yyyy-MM-dd'T'hh:mm:ss.SSSZ e.g.

+3

@DateTimeFormat (pattern = "dd/MM/yyyy") \t частная дата dob; но все еще получаю: Пн. 30 авг. 15:28:22 CDT 1999 – bekur

1

Вы звоните System.out.println непосредственно в методе вашего класса. Это не может работать так.

Вы должны называть поле dob вне вашего класса, например, с страницы JSP. И таким образом, поле будет автоматически отформатировано для данного шаблона.

0

@NumberFormat и @DateTimeFormat аннотации работают только в среде Spring MVC. Вы должны использовать <mvc:annotation-driven/> в вашем файле конфигурации xml mvc.

0

Взгляните на свой импорт в своем классе. Тип вашей даты должен быть java.util.Date. Это может быть наследование из другого класса, например, java.sql.Date.

5

Я знаю, что это старый вопрос, но я отвечаю, потому что сегодня у меня такая же проблема, и я потерял 4 часа работы, чтобы найти решение. Проблема в том, что Spring использует jackson для сериализации и десериализации JSON. @DateTimeFormat аннотация не будет выполнять эту работу, вы должны сказать Джексону, как сериализовать дату.У вас есть два решения: первое это проще и использовать @JsonFormat аннотации в методе геттерной:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd/MM/yyyy") 
public Date getDob(){ 
    return dob; 
} 

Второе решение заключается в создании пользовательского сериалайзера для полой даты, как это:

public class JsonDateSerializer extends JsonSerializer<Date>{ 

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 

    @Override 
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) 
      throws IOException, JsonProcessingException { 

     String formattedDate = dateFormat.format(date); 

     gen.writeString(formattedDate); 
    } 
} 

, а затем использовать аннотацию в методе GET:

@JsonSerialize(using=JsonDateSerializer.class) 
public Date getDob(){ 
    return dob; 
} 

ссылка объясняет, как сделать сериалайзер

https://dzone.com/articles/how-serialize-javautildate

я столкнулся с другой проблемой, я импортировал в моем классе JsonDateSerializer классов из org.codehaus.jackson пакета, но весна даваемая мне эту ошибку:

java.io.FileNotFoundException: class path resource [org/codehaus/jackson/map/JsonSerializer.class] cannot be opened because it does not exist 

Так я изменил весь импорт в пакет

com.fasterxml.jackson 

и все это работает нормально. Надеюсь, это может помочь кому-то.

Смежные вопросы