Olá. Estou fazendo o curso Java: consumindo API, gravando arquivos e lidando com erros, onde é utilizado o Record pra trabalhar com o gson. No entanto, minha versão do java é a 8, na qual esse recurso aparentemente ainda não tinha sido colocado. Como posso substui-lo? O que eu preciso fazer é:
String json = response.body();
System.out.println(json);
Gson gson = new Gson();
TituloOmdb meuTituloOmdb = gson.fromJson(json, TituloOmdb.class);
System.out.println(meuTituloOmdb);
Utilizando o record, ficaria:
public record TituloOmdb (String title, String year, String runtime) {
}
O objetivo é passar o json gerado por uma busca numa API e criar um objeto dessa classe TituloOmdb com essas especificações passadas no parâmetro. Mas ao tentar fazer isso com Record ele me dá esse erro:
*Digite o nome do filme para busca:
batman
{"Title":"Batman","Year":"1989","Rated":"PG-13","Released":"23 Jun 1989","Runtime":"126 min","Genre":"Action, Adventure","Director":"Tim Burton","Writer":"Bob Kane, Sam Hamm, Warren Skaaren","Actors":"Michael Keaton, Jack Nicholson, Kim Basinger","Plot":"The Dark Knight of Gotham City begins his war on crime with his first major enemy being Jack Napier, a criminal who becomes the clownishly homicidal Joker.","Language":"English, French, Spanish","Country":"United States, United Kingdom","Awards":"Won 1 Oscar. 11 wins & 28 nominations total","Poster":"https://m.media-amazon.com/images/M/MV5BZWQ0OTQ3ODctMmE0MS00ODc2LTg0ZTEtZWIwNTUxOGExZTQ4XkEyXkFqcGdeQXVyNzAwMjU2MTY@._V1_SX300.jpg","Ratings":[{"Source":"Internet Movie Database","Value":"7.5/10"},{"Source":"Rotten Tomatoes","Value":"76%"},{"Source":"Metacritic","Value":"69/100"}],"Metascore":"69","imdbRating":"7.5","imdbVotes":"402,377","imdbID":"tt0096895","Type":"movie","DVD":"24 Jul 2014","BoxOffice":"$251,409,241","Production":"N/A","Website":"N/A","Response":"True"}
Exception in thread "main" java.lang.RuntimeException: Unable to invoke no-args constructor for class br.com.alura.screenmatch2.modelos.TituloOmdb. Register an InstanceCreator with Gson for this type may fix this problem.
at gson@2.6.2/com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:226)
at gson@2.6.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:206)
at gson@2.6.2/com.google.gson.Gson.fromJson(Gson.java:879)
at gson@2.6.2/com.google.gson.Gson.fromJson(Gson.java:844)
at gson@2.6.2/com.google.gson.Gson.fromJson(Gson.java:793)
at gson@2.6.2/com.google.gson.Gson.fromJson(Gson.java:765)
at screenmatch2/br.com.alura.screenmatch2.principal.PrincipalComBusca.main(PrincipalComBusca.java:37)
Caused by: java.lang.UnsupportedOperationException: Cannot allocate class br.com.alura.screenmatch2.modelos.TituloOmdb
at gson@2.6.2/com.google.gson.internal.UnsafeAllocator$4.newInstance(UnsafeAllocator.java:100)
at gson@2.6.2/com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:223)
... 6 more*
Como resolver?