Diferencia entre primavera @Controller
y @RestController
anotación.
¿Se @Controller
puede 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á@RestController
debido a lo@ResponseBody
que se incluye en esta anotación.@ResponseBody
convierte 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
@controller
y
@RestController
el
@ResponseBody
está activado por defecto. No necesita agregarlo sobre la firma de la función.fuente
Si lo usa,
@RestController
no puede devolver una vista (Al usarViewresolver
en Spring / springboot) y sí@ResponseBody
no es necesario en este caso.Si lo usa
@Controller
, puede devolver una vista en Spring web MVC.fuente
@RestController
Las clases anotadas son las mismas@Controller
pero@ResponseBody
está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@Controller
controladores 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
@RestController
fue introducido en Spring 4x. Esta anotación también se anota por sí misma, por@Controller
lo que si no funciona como un@Controller
informe, informe esto como un error.Interceptor
a una@RestController
.Interceptor
a@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
@RestController
fue 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:
@RequestMapping
junto con@ResponseBody
como@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 }
@ResponseBody
se 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
@Controller
vuelveView
.@RestController
vuelveResponseBody
.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@Component
y 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@Controller
cual agrega@Controller
y@ResponseBody
anota automáticamente, por lo que no tenemos que agregar@ResponseBody
a 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
@RestController
es la composición de@Controller
y@ResponseBody
, si no estamos usando la@ResponseBody
firma 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