Bom, estou criando uma API de um quiz. Estou consumindo os dados de uma API externa que tem perguntas para eu consumir na minha API. Só que na hora de disserializar os dados no record usando a biblioteca Jackson não está funcionando. Os dados vem para API mas nesse momento ele não passa os dados, não sei qual é o problema. A API que estou consumindo é essa: https://opentdb.com/
Vou deixar meu código e os logs aqui abaixo para se alguém poder analisar e me da um caminho para solucionar esse problema.
@Entity
@Table(name = "tb_quiz")
@NoArgsConstructor
@Getter
public class Quiz {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String type;
private String difficulty;
private String category;
private String question;
private String correctAnswer;
@OneToMany(mappedBy = "quiz", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<IncorrectAnswer> incorrectAnswers;
public Quiz(String type, String difficulty, String category, String question, String correctAnswer) {
this.type = type;
this.difficulty = difficulty;
this.category = category;
this.question = question;
this.correctAnswer = correctAnswer;
}
}
@Entity
@Table(name = "tb_incorrect_answer")
@Getter
@Setter
@NoArgsConstructor
public class IncorrectAnswer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "quiz_id")
private Quiz quiz;
}
public record UrlDTO(
String amount,
String category,
String difficulty,
String type
) {
}
@JsonIgnoreProperties(ignoreUnknown = true)
public record QuizDTO(
@JsonAlias("type")
String type,
@JsonAlias("difficulty")
String difficulty,
@JsonAlias("category")
String category,
@JsonAlias("question")
String question,
@JsonAlias("correct_answer")
String correctAnswer,
@JsonAlias("incorrect_answers")
List<IncorrectAnswer> incorrectAnswers
) {
}
@Service
@Slf4j
public class ConsumeApiImpl implements ConsumeAPI {
@Override
public String consumeAPI(String url) {
if (url == null || url.isEmpty()) {
throw new IllegalArgumentException("URL is null or empty");
}
log.info("Iniciando chamada para a URL: {}", url);
try {
URI uri = new URI(url);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(uri)
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
log.info("Resposta recebida da API: {}", response.statusCode());
return response.body();
} catch (IOException | InterruptedException | URISyntaxException e) {
log.error("Erro ao consumir a API: {}", e.getMessage());
throw new ConsumeApiException("Erro ao consumir a API", e);
}
}
}
@Service
@AllArgsConstructor
public class ConvertDataImpl implements ConvertData {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public <T> T convertData(String json, Class<T> clazz) {
try {
return objectMapper.readValue(json, clazz);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}