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.

¿Cómo enviar múltiples parámetros utilizando Axios y acceder a ellos utilizando un servicio de Java Spring Boot?

Estoy desarrollando una aplicación utilizando Nuxtjs/Vuejs. Dentro de eso, estoy usando Axios para enviar algunos datos a mi servicio Java Spring-boot.

Me gustaría enviar múltiples parámetros dentro de mi solicitud Axios Post y acceder a ellos en el Java Spring-boot. Puedo hacerlo funcionar para un solo parámetro, pero cuando paso múltiples parámetros, obtengo el error “El cuerpo de la solicitud es requerido” dentro del servicio Java.

Mi solicitud Axios Post:

export const actions = {
    testdataGenerator ({ commit, state, dispatch }) {
        const headers = { 'Content-Type': 'application/json' }

        this.$axios.post('/generateTestData', { params: { inputTemplate: state.testDataInput, identifiersTemplate: state.identifiersData } }, { headers })
          .then((response) => {
            console.log(response)
          })
          .catch((error) => {
            console.log(error)
          })
    }
}

Servicio Java Spring Boot:

@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/api")
public class TestDataGeneratorController {

    @PostMapping(value = "/generateTestData", consumes = "application/json", produces = "text/plain")
    public String generateTestData(@RequestBody String inputTemplate, @RequestBody String identifiersTemplate) throws TestDataGeneratorException {
        try {
            System.out.println(inputTemplate);
            System.out.println(identifiersTemplate);
            return null;
        } catch (Exception exception) {
            throw new TestDataGeneratorException(exception.getMessage());
        }
    }
}

¿Alguien puede decirme qué debo cambiar dentro de mi servicio Axios/Java para que la solicitud POST funcione?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para enviar múltiples parámetros en tu solicitud de Axios Post y acceder a ellos utilizando Java Spring Boot, necesitas cambiar la forma en que pasas el cuerpo de la solicitud.

    En lugar de usar { params: { inputTemplate: state.testDataInput, identifiersTemplate: state.identifiersData } }, debes pasar el cuerpo de la solicitud directamente de la siguiente manera:

    {
      inputTemplate: state.testDataInput,
      identifiersTemplate: state.identifiersData
    }
    

    Tu solicitud de Axios Post actualizada debe verse así:

    export const actions = {
        testdataGenerator ({ commit, state, dispatch }) {  
            const headers = { 'Content-Type': 'application/json' }
    
            this.$axios.post('/generateTestData', { 
              inputTemplate: state.testDataInput, 
              identifiersTemplate: state.identifiersData 
            }, { 
              headers 
            })
              .then((response) => {
                console.log(response)
              })
              .catch((error) => {
                console.log(error)
              })
        }
    }
    

    En tu servicio Java Spring Boot, en lugar de usar @RequestBody dos veces, puedes crear una clase que encapsule los dos parámetros de la siguiente manera:

    public class TestDataGeneratorRequest {
        private String inputTemplate;
        private String identifiersTemplate;
    
        // getters and setters
    }
    

    Luego, puedes modificar tu método generateTestData para usar esta clase como el cuerpo de la solicitud:

    @PostMapping(value = "/generateTestData", consumes = "application/json", produces = "text/plain")
    public String generateTestData(@RequestBody TestDataGeneratorRequest request) throws TestDataGeneratorException {
        try {
            System.out.println(request.getInputTemplate());
            System.out.println(request.getIdentifiersTemplate());
            return null;
        } catch (Exception exception) {
            throw new TestDataGeneratorException(exception.getMessage());
        }
    }
    

    Ahora deberías poder enviar múltiples parámetros en tu solicitud de Axios Post y acceder a ellos utilizando Java Spring Boot.

Comments are closed.