Análisis de Spring MVC @RequestParam

Prefacio

Este artículo aborda temas relacionados.

1. Error El parámetro de cadena requerido 'xx' no está presente

2.@RequestParam recibe un error al recibir los parámetros de solicitud de publicación

3. Cómo utilizar @RequestParam

4.springmvc usa el mismo nombre de parámetro que @RequestParam, ¿por qué no se puede recibir?

5. Cuando axios envía una solicitud de publicación, springMVC no puede recibir datos.

Demostración de problemas

    @RequestMapping(method = RequestMethod.POST, value = "/test")
    @ResponseBody
    public ResponseEntity testDelete(@RequestParam("id") Integer id)
            throws Exception {
        return ResponseEntity.ok();
    }

El código especifica el método de solicitud POST y usa @RequestParam para recibir el parámetro id.

Entonces el parámetro de solicitud de front-end también es correcto, tiene el formato {id:111}, que se ve bien. El nombre del parámetro es exactamente el mismo, pero el mensaje de error de back-end El parámetro de cadena requerido 'id' no es Se informa presente, diciendo que se debe pasar el parámetro id.

analizar el problema

Aunque el formulario del parámetro pasado por el front-end es de hecho el mismo, el nombre del parámetro parece ser el mismo, pero este parámetro se pasa como el cuerpo de la solicitud en lugar de como un parámetro ordinario o un parámetro de consulta {id: 111}. idPor lo tanto, no se puede recibir directamente mediante la anotación @RequestParam.

El fondo de SpringMVC no puede aceptar datos de solicitud POST | Una olla de caos

y la diferencia

La diferencia entre los datos del formulario y la carga útil de la solicitud en las solicitudes HTTP

La diferencia entre datos de formulario y carga útil de solicitud en solicitudes HTTP · Número 105 · kaola-fed/blog · GitHub

Resolver el problema

La forma correcta de manejarlo es declarar un objeto como cuerpo de la solicitud en el método del controlador y agregar la anotación @RequestBody para anotarlo, similar al siguiente ejemplo:

@RequestMapping(method = RequestMethod.POST, value = "/test")
@ResponseBody
public ResponseEntity testDelete(@RequestBody Map<String, Object> requestBody)
        throws Exception {
    Integer id = (Integer) requestBody.get("id");
    // do something with id
    return ResponseEntity.ok();
}

En este caso, recibimos todo el cuerpo del mensaje de solicitud (es decir, {id: 111}) como un objeto Map y obtenemos idde él los valores requeridos. De esta manera, puede ignorar cuestiones como si los nombres de los parámetros de la solicitud coinciden y si los parámetros de la solicitud requieren un procesamiento especial.

Supongo que te gusta

Origin blog.csdn.net/Mint6/article/details/82530965
Recomendado
Clasificación