2014-09-03 9 views
5

Mam poniższy kod:Nie można przekonwertować ciąg do tej pory przez requestBody wiosną

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

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

} 

Gdybym wysłać żądanie jako rrrr-mm-dd automatycznej konwersji do tej pory przedmiotem dzieje. wyjście w kontrolerze: - DateOfBirth = Czw 04 wrzesień 05:30:00 IST 2014

Ale kiedy wysłać DateOfBirth w formacie dd-mm-rrrr To nie konwertuje do String Data automatically.So how mogę sobie z tym poradzić.

JSON Zapytanie:

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

} 

Wyjście: Wyjście nr w konsoli nawet nie osiągnie kontrolera.

Próbowałem z @DateTimeFormat, ale nie działa.

Używam Spring 4.02 Proszę sugerować, czy istnieje adnotacja, której możemy użyć.

+0

spojrzeć na tym stanowisku: http://stackoverflow.com/questions/21505997/passing-a-date-as-json-with-spring-mvc-and-jackson – user3487063

Odpowiedz

10

@DateTimeFormat jest dla obiektów typu backend (command). Twój JSON jest przetwarzany (domyślnie) przez Jackson'a ObjectMapper w Spring's MappingJackson2HttpMessageConverter (zakładając, że najnowsza wersja Jacksona). Ten ObjectMapper ma wiele domyślnych formatów daty, którymi może się posługiwać. Wygląda na to, że jedną z nich jest yyyy-mm-dd, ale nie jest to dd-mm-yyyy.

Musisz zarejestrować swój własny format daty za pomocą numeru ObjectMapper i zarejestrować go pod numerem ObjectMapper za pomocą MappingJackson2HttpMessageConverter. Oto różne sposoby, aby to zrobić:

Alternatywnie, można użyć JsonDeserializer na każdej swojej całej klasy lub jednego z jego pól (data).Przykłady w poniższy odnośnik

1

listy itemCreate klasę przedłużyć 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); 
     } 
    } 
} 

Używaj @JsonDeserialize(using = CustomJsonDateDeserializer.class) adnotacji na setter metod.

Dzięki @Varun Achar odpowiedź, url

Powiązane problemy