Diferencia entre primavera @Controllery @RestControlleranotación.
¿Se @Controllerpuede usar la anotación para aplicaciones Web MVC y REST?
En caso afirmativo, ¿cómo podemos diferenciar si se trata de la aplicación Web MVC o REST?
java
spring
spring-mvc
Srikanth
fuente
fuente

Thymeleaf, no funcionará@RestControllerdebido a lo@ResponseBodyque se incluye en esta anotación.@ResponseBodyconvierte los objetos devueltos en algo que podría estar en el cuerpo, por ejemplo, JSON o XML ( fuente )En el siguiente código te mostraré la diferencia entre
@controllery
@RestControllerel
@ResponseBodyestá activado por defecto. No necesita agregarlo sobre la firma de la función.fuente
Si lo usa,
@RestControllerno puede devolver una vista (Al usarViewresolveren Spring / springboot) y sí@ResponseBodyno es necesario en este caso.Si lo usa
@Controller, puede devolver una vista en Spring web MVC.fuente
@RestControllerLas clases anotadas son las mismas@Controllerpero@ResponseBodyestán implicados los métodos del controlador.fuente
En realidad, tenga cuidado: no son exactamente lo mismo.
Si define algún interceptor dentro de su aplicación, no se aplicará a los Controladores anotados como
@RestController, sin embargo, funcionan con@Controllercontroladores anotados.es decir. configuración para el interceptor:
y en la declaración de un controlador Spring:
Sin embargo, funcionará
no termina teniendo asociado el interceptor.
fuente
@RestControllerfue introducido en Spring 4x. Esta anotación también se anota por sí misma, por@Controllerlo que si no funciona como un@Controllerinforme, informe esto como un error.Interceptora una@RestController.Interceptora@RestController.Como puede ver en la documentación de Spring (Documentación de Spring RestController ), la anotación de Rest Controller es la misma que la anotación de Controller, pero suponiendo que @ResponseBody esté activo de forma predeterminada, por lo que todos los json se analizan en objetos java.
fuente
LA nueva anotación @RestController en Spring4 +, que marca la clase como un controlador donde cada método devuelve un objeto de dominio en lugar de una vista. Es la abreviatura de @Controller y @ResponseBody juntos.
fuente
@RestControllerfue proporcionado desde la primavera 4.0.1. Estos controladores indican que aquí los métodos @RequestMapping asumen la semántica @ResponseBody por defecto.En versiones anteriores, se podía lograr una funcionalidad similar usando a continuación:
@RequestMappingjunto con@ResponseBodycomo@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }<mvc:annotation-driven/>puede usarse como una de las formas de usar JSON con Jackson o xml.@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }@ResponseBodyse trata como la vista aquí entre MVC y se envía directamente en lugar de ser enviado desde Dispatcher Servlet y los convertidores respectivos convierten la respuesta en el formato relacionado como texto / html, aplicación / xml, aplicación / json.Sin embargo, el Restcontroller ya está acoplado con ResponseBody y los respectivos convertidores. En segundo lugar, aquí, ya que en lugar de convertir el cuerpo de respuesta, se convierte automáticamente en respuesta http.
fuente
@ControllervuelveView.@RestControllervuelveResponseBody.fuente
La anotación @RestController se introdujo en Spring 4.0 para simplificar la creación de servicios web RESTful. Es una anotación de conveniencia que combina @Controller y @ResponseBody, lo que elimina la necesidad de anotar todos los métodos de manejo de solicitudes de la clase de controlador con la anotación @ResponseBody.
fuente
@Controller: Esta anotación es solo una versión especializada@Componenty permite que las clases de controlador se detecten automáticamente en función del escaneo de classpath.@RestController: Esta anotación es una versión especializada de la@Controllercual agrega@Controllery@ResponseBodyanota automáticamente, por lo que no tenemos que agregar@ResponseBodya nuestros métodos de mapeo.fuente
@Controller se usa en sistemas heredados que usan JSP. Puede devolver vistas. @RestController es para marcar que el controlador está proporcionando servicios REST con el tipo de respuesta JSON. entonces envuelve las anotaciones @Controller y @ResponseBody juntas.
fuente
@RestControlleres la composición de@Controllery@ResponseBody, si no estamos usando la@ResponseBodyfirma in Method, entonces necesitamos usar el@Restcontroller.fuente
En lugar de utilizar @Controller y @ResponseBody, @RestController le permite exponer Rest APIs en Spring 4.0 y superior.
fuente