2014-09-03 10 views
5

ich den Code unten haben:kann nicht von requestBody im Frühjahr String zu Datum konvertieren

DTO:

Class MyDTO { 
     import java.util.Date; 
     private Date dateOfBirth; 

     public Date getDateOfBirth() { 
       return dateOfBirth; 
      } 
     public void setDateOfBirth(Date dateOfBirth) { 
       this.dateOfBirth = dateOfBirth; 
      } 

    } 

-Controller

public void saveDOB(@RequestBody MyDTO myDTO,HttpServletRequest httprequest,HttpServletResponse httpResponse) { 
System.out.println("Inside Controller"); 

System.out.println (myDTO.getDateOfBirth());

} 

JSON Anfrage:

{ 
"dateOfBirth":"2014-09-04", 

} 

Wenn ich die Anfrage als yyyy-mm-dd automatische Konvertierung in Datumsobjekt geschieht senden. Ausgang in Regler: - dateOfBirth = Do 4. September 05.30.00 IST 2014

Aber wenn ich dateOfBirth in dd-mm-yyyy-Format senden konvertiert es nicht String to Date automatically.So wie Ich kann mit diesem Fall umgehen.

JSON Anfrage:

{ 
"dateOfBirth":"04-09-2014", 

} 

Ausgang: Nein Ausgabe in der Konsole erreicht nicht einmal Controller.

Ich habe versucht mit @DateTimeFormat aber es funktioniert nicht.

Ich benutze Frühling 4,02 Bitte schlagen Sie vor, gibt es eine Anmerkung, die wir verwenden können.

+0

einen Blick auf dieses Thema haben: http://stackoverflow.com/questions/21505997/passing-a-date-as-json-with-spring-mvc-and-jackson – user3487063

Antwort

10

@DateTimeFormat ist für Formularunterstützungs (Befehls) -Objekte. Ihr JSON wird (standardmäßig) von Jacksons ObjectMapper in Spring MappingJackson2HttpMessageConverter verarbeitet (unter der Annahme der neuesten Version von Jackson). Diese ObjectMapper hat eine Reihe von Standard-Datumsformaten, die es verarbeiten kann. Es scheint yyyy-mm-dd ist einer von ihnen, aber dd-mm-yyyy ist nicht.

Sie müssen Ihr eigenes Datumsformat mit einer ObjectMapper registrieren und diese ObjectMapper mit der MappingJackson2HttpMessageConverter registrieren. Hier sind verschiedene Möglichkeiten, das zu tun:

Alternativ können Sie eine JsonDeserializer entweder auf Ihre ganze Klasse oder eines seiner Felder verwenden können (das Datum).Beispiele in der unten stehenden Link

1

Liste itemCreate eine Klasse JsonDeserializer

public class CustomJsonDateDeserializer extends JsonDeserializer<Date> { 
    @Override 
    public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
     String date = jsonParser.getText(); 
     try { 
      return format.parse(date); 
     } catch (ParseException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

Verwenden @JsonDeserialize(using = CustomJsonDateDeserializer.class) Anmerkung auf setter Methoden zu erweitern.

Dank @Varun Achar Antwort, url

Verwandte Themen