es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Dos llamadas de API de cliente web dependientes en Spring Boot.

Tengo dos llamadas de API de las que necesito obtener el resultado de la segunda llamada de API en función del resultado de la primera llamada de API, después de eso necesito fusionar ambas respuestas de llamadas de API. Dejaré aquí el código:

  1. Llamada de API: https://localhost:8080/projects. Esta es la primera llamada de API y el resultado es el siguiente:
[
{
    "projectId" : 2,
    "projectName" : "Hello",
    "projectDesc" : "Proyecto de demostración"
},
{
    "projectId" : 3,
    "projectName" : "Hello123",
    "projectDesc" : "Serie de proyectos de demostración"
},
{
    "projectId" : 4,
    "projectName" : "Hello456",
    "projectDesc" : "Proyecto de demostración repetido"
}
]
  1. Segunda llamada de API http://localhost:8080/projectId en el sentido (http://localhost:8080/2). El resultado es el siguiente:
[
{
"teamMember" : "abc",
"teamMemberRole" : "Manager"
}
]

Ahora necesito fusionar ambas respuestas. ¿Cómo puedo lograr esto usando webclient?

[
{
"projectId" : 2,
"projectName" : "Hello",
"projectDesc" : "Proyecto de demostración",
"teamMember" : "abc",
"teamMemberRole" : "Manager"
}
]

Agradezco su ayuda. Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto utilizando WebClient, puedes seguir los siguientes pasos:

    1. Realiza la primera llamada a la API para obtener la lista de proyectos utilizando webclient:
    WebClient client = WebClient.create();
    List<project> projects = client.get()
            .uri("http://localhost:8080/projects")
            .retrieve()
            .bodyToMono(new ParameterizedTypeReference<><project>>() {})
            .block();
    
    1. Para cada proyecto, realiza una segunda llamada a la API utilizando su id de proyecto para obtener la información del miembro del equipo:
    for (Project project : projects) {
        List<teammember> teamMembers = client.get()
                .uri("http://localhost:8080/projectId/" + project.getProjectId())
                .retrieve()
                .bodyToMono(new ParameterizedTypeReference<><teammember>>() {})
                .block();
    
        // asumiendo que solo hay un miembro del equipo para cada proyecto
        TeamMember teamMember = teamMembers.get(0);
    
        // establece la información del miembro del equipo para el proyecto
        project.setTeamMember(teamMember.getName());
        project.setTeamMemberRole(teamMember.getRole());
    }
    
    1. La lista projects ahora contiene la respuesta combinada:

    [
    {
    "projectId" : 2,
    "projectName" : "Hola",
    "projectDesc" : "Proyecto de demostración",
    "teamMember" : "abc",
    "teamMemberRole" : "Gerente"
    },
    {
    "projectId" : 3,
    "projectName" : "Hola123",
    "projectDesc" : "Serie de proyectos de demostración",
    "teamMember" : "xyz",
    "teamMemberRole" : "Desarrollador"
    },
    {
    "projectId" : 4,
    "projectName" : "Hola456",
    "projectDesc" : "Repetición de proyecto de demostración",
    "teamMember" : "pqr",
    "teamMemberRole" : "Diseñador"
    }
    ]

Comments are closed.