1 minute read

Recentemente, descobri que Jackson não suportava os tipos disponíveis no pacote java.time do Java 8. Esse post demonstra o problema e como solucioná-lo.

Embora não seja requisito para o post, eu utilizo Lombok para gerar automaticamente os métodos get, set e toString.

Dependências

  • Adicione as seguintes dependências do MAVEN

Problema

Tente executar o código a seguir e observe a exceção.

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class java.time.LocalDate]

Esse erro ocorre ao tentar converter o JSON para qualquer um dos tipos presentes no pacote java.time.

Solução

Adicione a dependência do módulo Jackson jsr310 ao seu pom.xml

Agora, registre o JavaTimeModule no ObjectMapper.

Dessa vez, sua classe Creature deve ter sido executada com sucesso.

Bônus: Spring Boot

O Spring Boot já possui Jackson integrado por padrão. Dessa forma, o ObjectMapper pode ser injetado como dependência em seus componentes. Por exemplo:

Além disso, todas as requests recebidas no seus controllers são automaticamente tratadas pelo Jackson.

Para registrar o módulo JavaTimeModule no contexto do Spring é necessário redefinir o bean ObjectMapper. Podemos utilizar Java config do Spring ou XML, se você preferir. Não abordarei a configuração com XML nesse post, para isso verifique a documentação oficial do Spring.

Updated: