Java 8 dates com Jackson JSON
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.