본문 바로가기

Spring

[ERROR] JSON parse error: Cannot deserialize value of type `java.time.LocalTime` from String

[기본개념]

deserialize : 역직렬화

- JSON을 Java 타입으로 변환하는 과정

 

 

[Jackson]

spring-boot-starter-web dependency를 추가하면, 그 하위에 json객체를 파싱해주는 spring-boot-starter-json 라이브러리가 기본으로 탑재되어있다. 그 하위에는 jackson 라이브러리들 (jackson-datatype-jsr310 라이브러리 포함)이 존재한다.

 

Jackson 라이브러리의 @JsonFormat 어노테이션을 활용해서, 해당 오류를 해결하면 된다.

 

 

 

1. RequestBody로 들어온 json을 파싱하기

컨트롤러에서는 @RequestBody를 통해 request 객체를 받는다

@PostMapping("/api/requested-store/register")
public Long register(@RequestBody RequestedStoreSaveRequest request) {
    return requestedStoreService.save(mapper.toRequestedStoreSave(request));
}

request객체의 필드는 다음과 같다.

필드 중 LocalTime을 사용하는 필드에 @JsonFormat(pattern="kk:mm:ss") 를 붙여주면 된다.

public class RequestedStoreSaveRequest {
    ...
    @JsonFormat(pattern = "kk:mm:ss")
    private LocalTime openTime; // 날짜 없는 시각은 localtime 사용
    ...
}

 

 

 

 

 

 

[참고]

https://perfectacle.github.io/2018/01/15/jackson-local-date-time-deserialize/

 

(Jackson) LocalDate, LocalTime, LocalDateTime 뽀개기 - Deserialize

잭슨은 JSON -> Java 클래스로 Deserialize, Java 클래스 -> JSON으로 Serialize 할 때 매우 유용한 라이브러리다. 하지만 잭슨이 나온 이후에 자바 8이 나왔는지 모르겠는데 LocalDate, LocalTime, LocalDateTime 등등의

perfectacle.github.io