¿Alguien puede explicar las anotaciones @RequestBody
y @ResponseBody
en Spring 3? ¿Para qué son? Cualquier ejemplo sería genial.@RequestBody y @ResponseBody anotaciones en Spring
Respuesta
Hay toda una sección en los documentos llamada 16.3.3.4 Mapping the request body with the @RequestBody annotation. Y uno llamado 16.3.3.5 Mapping the response body with the @ResponseBody annotation. Te sugiero que consultes esas secciones. También es relevante: @RequestBody
javadocs, @ResponseBody
javadocs
Ejemplos de uso sería algo como esto:
El uso de un JavaScript-biblioteca como jQuery, que sería publicar un JSON a objetos como esto:
{ "firstName" : "Elmer", "lastName" : "Fudd" }
Su método de control 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 bien, si usted tiene Jackson en su ruta de clases (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 agregó la anotación @ResponseBody
). Por lo que el navegador/cliente podrá ver este resultado JSON:
{ "description" : "Elmer Fudd hates wacky wabbits" }
Ver esta respuesta anterior de la mina para un ejemplo de trabajo completo: https://stackoverflow.com/a/5908632/342852
Nota: RequestBody/responseBody es, por supuesto, no se limita a JSON, ambos pueden maneja múltiples formatos, incluyendo texto plano y XML, pero JSON es probablemente el formato más utilizado.
Actualización: Desde 4.x primavera, lo normal es que no utilice @ResponseBody
el nivel de método, sino más bien @RestController
el nivel de clase, con el mismo efecto. Ver Creating REST Controllers with the @RestController annotation
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 se va a mostrar todos los detalles del usuario y en particular id ahora quiero usar ambos ID y el nombre,
1) localhost: 8093/plejson/tienda/usuario < - --este acoplamiento exhibirá todos los datos de usuario
2) localhost: 8093/plejson/tienda/user/11 < ---- si yo uso 11 en medios de enlace, se mostrará el usuario particular 11 detalles
ahora desea utilizar tanto la identificación como el nombre
localhost: 8093/plejson/shop/user/11/raju < ----------------- como este significa que podemos usar cualquiera en esto por favor ayúdenme .....
Corrija el formato del ejemplo de respuesta y código. –
Por favor, describa cómo este código ayuda al interlocutor. Gracias. –
http://www.programming-free.com/2014/03/spring-mvc-40-restful-web-service-json.html .................. ..go través de este enlace obtendrá ... gracias – user5409646
@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 se puede poner en un método e indica que el tipo de retorno debe ser escrito directamente al cuerpo de la respuesta HTTP (y no colocado 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 utilizar @RestController anotación en lugar de @Controller
anotación. Esto eliminará la necesidad de usar @ResponseBody
.
a continuación es 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;
}
Mediante el uso de la anotación @RequestBody obtendrá sus valores mapeados con el modelo que ha creado en el sistema para el manejo de 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.
- 1. Spring 3, ReST, @ResponseBody y @ExceptionHandler
- 2. Spring MVC: @ResponseBody, 415 no admitido Tipo de soporte
- 3. Anotaciones de Spring Spring @RequestMapping
- 4. XML/JSON POST con RequestBody en Spring REST Controller
- 5. ¿Se puede usar Jackson con Spring MVC 3.0 para vincular también RequestBody a Java Bean?
- 6. Testing Spring @MVC anotaciones
- 7. ¿Usa @RequestBody y @ModelAttribute juntos?
- 8. Spring MVC 3: Devolver XML a través de @ResponseBody
- 9. Anotaciones de Spring @Transactional ignoradas
- 10. Usando @RequestBody y @RequestParam juntos en la primavera mvc3
- 11. Diferencia entre las anotaciones JTA y Spring @Transactional
- 12. Registrer MappingJackson2HttpMessageConverter en Spring 3.1.2 con anotaciones JAXB
- 13. Spring Validación de MVC con anotaciones
- 14. jQuery y Spring MVC
- 15. ¿Spring MVC admite las anotaciones JSR 311?
- 16. Crear prototipo de Spring Bean con anotaciones?
- 17. Controlador de primavera: objetos de uso de dominio como @RequestBody
- 18. use spring mvc3 @ResponseBody tenía 415 Tipo de soporte no soportado ¿por qué?
- 19. Spring MVC: using @ResponseStatus (reason = '') en un manejador de excepciones @ResponseBody en tomcat
- 20. primavera @ResponseBody Jackson JsonSerializer con JodaTime
- 21. RESTO con enlace de datos completo de Spring y Jackson
- 22. HTTPBuilder establece requestBody en el método GET
- 23. Se ignoran las anotaciones de Jackson en Spring
- 24. Problema Deserializando con Jackson utilizando anotaciones JAXB en Spring MVC
- 25. Marshaling JSON y Generics en Java con Spring MVC
- 26. primavera @ResponseBody Json cíclica Referencia
- 27. Spring MVC @ResponseBody que devuelve un mapa produce "Error 406 NO ACEPTABLE"
- 28. HttpMessageConverter personalizado con @ResponseBody para hacer cosas Json
- 29. Spring y @Autowired en DelegatingFilterProxy
- 30. Mocking Spring MVC BindingResult al usar las anotaciones
Muchas gracias @Sean – leo
En su respuesta vinculada, utilizó la anotación '@ ResponseBody' en el parámetro, no el método. Recibo errores al tratar de ponerlo en el método, así que supongo que tu otra respuesta es correcta. Creo que deberías tener 'getDescription (@RequestBody UserStats stats)' arriba. – Patrick
@Patrick no, '@ RequestBody' está en el parámetro,' @ ResponseBody' está en el método. diferencia importante! –