responsebody requestbody que mvc example ejemplo body java spring spring-mvc annotations

java - mvc - @RequestBody y @ResponseBody anotaciones en Spring



spring rest ejemplo (4)

A continuación se muestra un ejemplo de un método en un controlador de Java.

@RequestMapping(method = RequestMethod.POST) @ResponseBody public HttpStatus something(@RequestBody MyModel myModel) { return HttpStatus.OK; }

Al usar la anotación @RequestBody obtendrá sus valores asignados con el modelo que creó en su sistema para manejar cualquier llamada específica. Mientras usa @ResponseBody puede enviar cualquier cosa al lugar desde donde se generó la solicitud. Ambas cosas serán mapeadas fácilmente sin escribir ningún analizador personalizado, etc.

¿Alguien puede explicar las anotaciones @RequestBody y @ResponseBody en Spring 3? ¿Para qué son? Cualquier ejemplo sería genial.


Hay una sección completa en los documentos llamados 16.3.3.4 Asignación del cuerpo de la solicitud con la anotación @RequestBody . Y uno llamó a 16.3.3.5 Mapeo del cuerpo de respuesta con la anotación @ResponseBody . Te sugiero que consultes esas secciones. También es relevante: @RequestBody javadocs, @ResponseBody javadocs

Los ejemplos de uso serían algo como esto:

Utilizando una biblioteca de JavaScript como JQuery, publicaría un objeto JSON de esta manera:

{ "firstName" : "Elmer", "lastName" : "Fudd" }

Su método de controlador se vería así:

// controller @ResponseBody @RequestMapping("/description") public Description getDescription(@RequestBody UserStats stats){ return new Description(stats.getFirstName() + " " + stats.getLastname() + " hates wacky wabbits"); } // domain / value objects public class UserStats{ private String firstName; private String lastName; // + getters, setters } public class Description{ private String description; // + getters, setters, constructor }

Ahora, si tiene a Jackson en su classpath (y tiene una configuración <mvc:annotation-driven> ), Spring convertiría el JSON entrante en un objeto UserStats del cuerpo de la publicación (porque agregó la anotación @RequestBody ) y serializaría el Objeto devuelto a JSON (porque ha agregado la anotación @ResponseBody ). Entonces, el navegador / cliente vería este resultado JSON:

{ "description" : "Elmer Fudd hates wacky wabbits" }

Vea esta respuesta mía anterior para obtener un ejemplo de trabajo completo: https://.com/a/5908632/342852

Nota: RequestBody / ResponseBody por supuesto no está limitado a JSON, ambos pueden manejar múltiples formatos, incluyendo texto plano y XML, pero JSON es probablemente el formato más utilizado.

Actualización: Desde Spring 4.x, generalmente no @ResponseBody en el nivel de método, sino más bien @RestController en el nivel de clase, con el mismo efecto. Consulte Creación de controladores REST con la anotación @RestController


@RequestBody : la anotación que indica un parámetro de método debe vincularse al cuerpo de la solicitud HTTP.

Por ejemplo:

@RequestMapping(path = "/something", method = RequestMethod.PUT) public void handle(@RequestBody String body, Writer writer) throws IOException { writer.write(body); }

@ResponseBody anotación @ResponseBody se puede colocar en un método e indica que el tipo de devolución debe escribirse directamente en el cuerpo de respuesta HTTP (y no debe colocarse en un Modelo o interpretarse como un nombre de vista).

Por ejemplo:

@RequestMapping(path = "/something", method = RequestMethod.PUT) public @ResponseBody String helloWorld() { return "Hello World"; }

Alternativamente, podemos usar la anotación @RestController en lugar de la anotación @Controller . Esto eliminará la necesidad de usar @ResponseBody .

para más detalles


package com.programmingfree.springshop.controller; import java.util.List; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.programmingfree.springshop.dao.UserShop; import com.programmingfree.springshop.domain.User; @RestController @RequestMapping("/shop/user") public class SpringShopController { UserShop userShop=new UserShop(); @RequestMapping(value = "/{id}", method = RequestMethod.GET,headers="Accept=application/json") public User getUser(@PathVariable int id) { User user=userShop.getUserById(id); return user; } @RequestMapping(method = RequestMethod.GET,headers="Accept=application/json") public List<User> getAllUsers() { List<User> users=userShop.getAllUsers(); return users; } }

En el ejemplo anterior, van a mostrar todos los detalles de usuario y de identificación en particular. Ahora quiero usar tanto el id como el nombre.

1) localhost: 8093 / plejson / shop / user <--- este enlace mostrará todos los detalles del usuario
2) localhost: 8093 / plejson / shop / user / 11 <---- si uso 11 en el enlace significa que mostrará los detalles del usuario particular 11

ahora quiero usar tanto el id como el nombre

localhost: 8093 / plejson / shop / user / 11 / raju <----------------- como este significa que podemos usar cualquiera en esto por favor ayúdenme ... .