Este artículo estudia principalmente el contenido relevante sobre el uso correcto de @RequestBody, de la siguiente manera.
Recientemente, estaba tomando un trabajo con un colega que estaba a punto de irse. El proyecto que tomé fue construido con Springboot. Vi este método de escritura:
@RequestMapping ("dothis") public String dothis (httpservletRequest request, @RequestParam ("id") ID de larga,/ID de usuario @RequestParam ("Back_url") String Back_url,/dirección de devolución de llamada @RequestBody Testentity JSON_DATA // JSON Data, para Java Herity Class) {/// ...Este es un método de mapeo de solicitudes y luego ingrese la URL con el navegador: http://127.0.0.1:8080/test/dothis?id=1&back_url=url&json_data= ="code":2,"message":"test "}
En este método, use @requestParam para obtener los parámetros y luego use @RequestBody para convertir los parámetros en formato JSON a Java Type
Cuando se ejecuta, se encontró el error: Falta el cuerpo de la solicitud requerida
@RequestBody requiere el uso de Mappingjackson2httpMessageConverter para cargar, pero la documentación oficial de SpringBoot menciona que esto ya está cargado de forma predeterminada, y no hay errores en la escritura de las cadenas JSON y los javabeans.
Por lo tanto, teniendo en cuenta que debería ser un problema de solicitar el tipo de contenido, porque no hay forma de definir el tipo de contenido utilizando el navegador para ingresar a la URL, la primavera no puede encontrar el cuerpo de solicitud
Para confirmar esta idea, escriba una clase de solicitud usted mismo:
Cadena add_url = "http://127.0.0.1:8080/test/dothis"; Url url = nueva url (add_url); Httpurlconnection Connection = (httpurlconnection) url.openconnection (); Connect.SetDoInput (verdadero); Connect.SetDoOutput (verdadero); Connect.SetRequestMethod ("Post"); Connect.SetUsecaches (falso); Connection.SetInstanceFollowledirects (verdadero); Connection.setRequestProperty ("Content-type", "Application/JSON"); Connection.Connect (); DatautputStream out = new DataOutputStream (Connection.getOutputStream ()); JsonObject obj = new JsonObject (); obj.put ("código", -1002); obj.put ("mensaje", "msg"); out.writytes (obj.ToString ()); out.flush (); out.close ();La solicitud aún falló. Después de la depuración, descubrí que todas las anotaciones de @requestparam deben eliminarse para tener éxito.
Resumir
1. @RequestBody necesita analizar todos los parámetros de solicitud como JSON. Por lo tanto, el valor clave = no se puede incluir en la URL de solicitud. Todos los parámetros de solicitud son un JSON
2. Al ingresar URL directamente a través del navegador, @RequestBody no puede obtener el objeto JSON. Debe utilizar la programación Java o la solicitud de método basada en AJAX, y establecer el tipo de contenido en la aplicación/JSON
Lo anterior se trata de interpretar el uso correcto de @RequestBody, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!