2013-07-19 12 views
8

Używam samodzielnej struktury Spring i chcę zaimplementować Spring 3.2 @DateTimeFormat (pattern = "dd/mm/rrrr"), ale nie uzyskując oczekiwanego wyniku.Wiosna 3.2 Format czasu daty

Moje urywek kodu jest:

@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)  
    } 

daje następujący wynik:

Mon Aug 30 15:08:14 CDT 1999 

ale spodziewałem wyjście jak: 30/08/1999

Chcę zaimplementować bez czasu Joda biblioteka

+0

W jaki sposób "drukujesz" dane wyjściowe? Pytam, ponieważ wygląda na to, że adnotacja w ogóle nie jest brana pod uwagę. – Ralph

+0

Korzystałbym z interfejsu API [Joda-time] (http://joda-time.sourceforge.net/) (jak zawsze jest to moje preferencje) iz pewnością nie jest to interfejs API domyślnej daty domyślnej Java SE. Jeśli używasz Spring 3.2, możesz zarejestrować edytor właściwości niestandardowych bezpośrednio za pomocą ['@ ControllerAdvice'] (http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework /web/bind/annotation/ControllerAdvice.html), aby spełnić wszelkie wymagania. – Lion

Odpowiedz

15

Spróbuj zmienić format na:

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

MM przez wiele miesięcy, mm na minuty.

Wystarczy spojrzeć na ten documentation:

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

+3

@DateTimeFormat (wzorzec = "dd/MM/rrrr") \t prywatny Data dob; ale wciąż dostaje: Mon sierpnia 30 15:28:22 CDT 1999 – bekur

1

Telefonujesz System.out.println bezpośrednio w metodzie klasy. To nie może działać w ten sposób.

Musisz zadzwonić na pole dob spoza swojej klasy, na przykład ze strony JSP. W ten sposób pole zostanie automatycznie sformatowane do danego wzorca.

0

@NumberFormat i @DateTimeFormat adnotacje działają tylko w środowisku Spring MVC. Musisz użyć <mvc:annotation-driven/> w swoim pliku migracyjnego xml.

0

Spójrz na swój import w swojej klasie. Typem Twojej daty powinien być java.util.Date. Może dziedziczyć po innej klasie, na przykład java.sql.Date.

5

Wiem, że to stare pytanie, ale odpowiadam, ponieważ miałem ten sam problem dzisiaj i straciłem 4 godziny pracy, aby znaleźć rozwiązanie. Problem w tym, że Spring używa jackson do serializowania i deserializacji JSON. @DateTimeFormat adnotacja nie wykona zadania, musisz powiedzieć Jacksonowi, jak serializować datę.Masz dwa rozwiązania: pierwszym z nich jest prostsze i jest użycie @JsonFormat adnotacji w metodzie pochłaniacza:

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

Drugim rozwiązaniem jest utworzenie niestandardowego serializatora dla pól daty tak:

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); 
    } 
} 

a następnie użyć adnotacji w metodzie otrzymujemy:

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

ten link wyjaśnia jak to zrobić serializatora

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

wychodził inny problem, byłem importowania w mojej klasie JsonDateSerializer klas od org.codehaus.jackson pakietu, ale wiosna które proponowały mi ten błąd:

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

więc zmieniłem wszystkie importu do pakietu

com.fasterxml.jackson 

i wszystko działa dobrze. Mam nadzieję, że może komuś pomóc.