[SPRING] Spring에서 requestBody로 문자열을 날짜로 변환 할 수 없습니다.
SPRINGSpring에서 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.@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.목록 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
from https://stackoverflow.com/questions/25646564/unable-to-convert-string-to-date-by-requestbody-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring HandlerInterceptorAdapter postHandle이 보장됩니까? (0) | 2019.02.18 |
---|---|
[SPRING] AngularJS - 404 로그 아웃시 스프링 보안 (0) | 2019.02.18 |
[SPRING] jsp에서 Spring Controller 메소드로 매개 변수 전달하기 (0) | 2019.02.18 |
[SPRING] 스프링 autowired 빈이 널 포인터를 발생시킨다. (0) | 2019.02.18 |
[SPRING] spring-boot webapp가 준비된 후 자동으로 브라우저를 시작합니다. (0) | 2019.02.18 |