복붙노트

[SPRING] Spring에서 requestBody로 문자열을 날짜로 변환 할 수 없습니다.

SPRING

Spring에서 requestBody로 문자열을 날짜로 변환 할 수 없습니다.

아래 코드가 있습니다. 코드 :

DTO :

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

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

    }

제어 장치

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

JSON 요청 :

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

}

요청을 yyyy-mm-dd로 보내면 날짜에 대한 자동 변환이 발생합니다. 컨트롤러의 출력 : - dateOfBirth = Thu Sep 04 05:30:00 IST 2014

하지만 DateofBirth를 dd-mm-yyyy 형식으로 보내면 String을 Date로 자동 변환하지 않습니다. 어떻게이 사건을 처리 할 수 ​​있습니까?

JSON 요청 :

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

}

출력 : 콘솔의 출력이 컨트롤러에 도달하지 않습니다.

@DateTimeFormat로 시도했지만 작동하지 않습니다.

Spring 4.02를 사용하고 있습니다. 우리가 사용할 수있는 주석이 있는지 제안하십시오.

해결법

  1. ==============================

    1.@DateTimeFormat은 양식 백업 (명령) 객체 용입니다. JSON은 Spring의 MappingJackson2HttpMessageConverter에있는 Jackson의 ObjectMapper (기본적으로 Jackson의 최신 버전 가정)에 의해 처리됩니다. 이 ObjectMapper에는 처리 할 수있는 여러 가지 기본 날짜 형식이 있습니다. yyyy-mm-dd가 그 중 하나이지만 dd-mm-yyyy는 그렇지 않습니다.

    @DateTimeFormat은 양식 백업 (명령) 객체 용입니다. JSON은 Spring의 MappingJackson2HttpMessageConverter에있는 Jackson의 ObjectMapper (기본적으로 Jackson의 최신 버전 가정)에 의해 처리됩니다. 이 ObjectMapper에는 처리 할 수있는 여러 가지 기본 날짜 형식이 있습니다. yyyy-mm-dd가 그 중 하나이지만 dd-mm-yyyy는 그렇지 않습니다.

    ObjectMapper에 자신의 날짜 형식을 등록하고 MappingJackson2HttpMessageConverter에 ObjectMapper를 등록해야합니다. 다음과 같은 여러 가지 방법이 있습니다.

    또는 전체 클래스 또는 해당 필드 중 하나 (날짜)에서 JsonDeserializer를 사용할 수 있습니다. 아래 링크의 예

  2. ==============================

    2.목록 item JsonDeserializer를 확장 할 클래스 만들기

    목록 item 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);
            }
        }
    }
    

    setter 메소드에 @JsonDeserialize (= CustomJsonDateDeserializer.class 사용) 주석을 사용하십시오.

    감사합니다 @ Varun Achar 대답, url

  3. from https://stackoverflow.com/questions/25646564/unable-to-convert-string-to-date-by-requestbody-in-spring by cc-by-sa and MIT license