2014-09-03 13 views
5

ho il codice qui sotto:Impossibile convertire la stringa a data da requestBody in primavera

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 Richiesta:

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

} 

Se invio la richiesta come conversione automatica aaaa-mm-gg finora oggetto succede. uscita nel controllore: - dateOfBirth = gio 4 settembre 05:30:00 IST 2014

Ma quando invio DatadiNascita nel formato gg-mm-aaaa Non converte String to Date automatically.So come posso gestire questo caso.

JSON Richiesta:

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

} 

uscita: No Uscita in console non raggiunge nemmeno controller.

Ho provato con @DateTimeFormat ma non funziona.

Sto usando Spring 4.02 Si prega di suggerire c'è qualche annotazione che possiamo usare.

+0

un'occhiata a questo post: http://stackoverflow.com/questions/21505997/passing-a-date-as-json-with-spring-mvc-and-jackson – user3487063

risposta

10

@DateTimeFormat è per oggetti di modulo (comando). Il tuo JSON viene elaborato (di default) da Jackson's ObjectMapper in Spring's MappingJackson2HttpMessageConverter (assumendo l'ultima versione di Jackson). Questo ObjectMapper ha un numero di formati di data predefiniti che può gestire. Sembra che yyyy-mm-dd sia uno di questi, ma non lo è lo dd-mm-yyyy.

È necessario registrare il proprio formato di data con uno ObjectMapper e registrare lo ObjectMapper con lo MappingJackson2HttpMessageConverter. Qui ci sono diversi modi per farlo:

In alternativa, è possibile utilizzare un JsonDeserializer su entrambi vostra intera classe o uno dei suoi campi (la data).Esempi nel link qui sotto

1

Lista itemCreate una classe di estendere 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); 
     } 
    } 
} 

Usa @JsonDeserialize(using = CustomJsonDateDeserializer.class) annotazione setter metodi.

Grazie @Varun Achar risposta, url

Problemi correlati