Différence entre ressort @Controller
et @RestController
annotation.
L' @Controller
annotation peut-elle être utilisée pour les applications Web MVC et REST?
Si oui, comment pouvons-nous différencier s'il s'agit d'une application Web MVC ou REST.
java
spring
spring-mvc
Srikanth
la source
la source
Thymeleaf
celui-ci, il ne fonctionnera pas à@RestController
cause de@ResponseBody
celui inclus dans cette annotation.@ResponseBody
rend les objets retournés à quelque chose qui pourrait être dans le corps, par exemple JSON ou XML ( source )Dans le code ci-dessous, je vais vous montrer la différence entre
@controller
et
@RestController
l'
@ResponseBody
est activé par défaut. Vous n'avez pas besoin de l'ajouter au-dessus de la signature de fonction.la source
Si vous utilisez,
@RestController
vous ne pouvez pas retourner une vue (en utilisantViewresolver
dans Spring / springboot) et oui@ResponseBody
n'est pas nécessaire dans ce cas.Si vous utilisez,
@Controller
vous pouvez renvoyer une vue dans Spring Web MVC.la source
@RestController
les classes annotées sont les mêmes que@Controller
mais les@ResponseBody
méthodes on sur le gestionnaire sont implicites.la source
En fait, soyez prudent - ils ne sont pas exactement les mêmes.
Si vous définissez des intercepteurs dans votre application, ils ne s'appliqueront pas aux contrôleurs annotés car
@RestController
, cependant, ils fonctionnent avec les@Controller
contrôleurs annotés.c'est à dire. configuration de l'intercepteur:
et dans la déclaration d'un contrôleur Spring:
Fonctionnera cependant
ne finit pas par être associé à l'intercepteur.
la source
@RestController
a été introduit au printemps 4x. Cette annotation est également annotée par elle-@Controller
même si elle ne fonctionne pas comme une@Controller
alors signalez-la comme un bogue.Interceptor
à un@RestController
.Interceptor
à un@RestController
.Comme vous pouvez le voir dans la documentation Spring (Documentation Spring RestController ) L'annotation Rest Controller est identique à l'annotation Controller, mais en supposant que @ResponseBody est actif par défaut, donc tous les json sont analysés en objets java.
la source
LA nouvelle annotation @RestController dans Spring4 +, qui marque la classe comme un contrôleur où chaque méthode renvoie un objet de domaine au lieu d'une vue. C'est un raccourci pour @Controller et @ResponseBody regroupés.
la source
@RestController
a été fourni depuis le printemps 4.0.1. Ces contrôleurs indiquent qu'ici les méthodes @RequestMapping supposent la sémantique @ResponseBody par défaut.Dans les versions antérieures, la fonctionnalité similaire pouvait être obtenue en utilisant ci-dessous:
@RequestMapping
couplé avec@ResponseBody
comme@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }
<mvc:annotation-driven/>
peut être utilisé comme l'une des façons d'utiliser JSON avec Jackson ou xml.@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }
@ResponseBody
est traité comme la vue ici parmi MVC et il est distribué directement au lieu d'être distribué à partir de Dispatcher Servlet et les convertisseurs respectifs convertissent la réponse dans le format associé comme texte / html, application / xml, application / json.Cependant, le Restcontroller est déjà couplé avec ResponseBody et les convertisseurs respectifs. Deuxièmement, ici, car au lieu de convertir le corps de réponse, il est automatiquement converti en réponse http.
la source
@Controller
retourneView
.@RestController
retourneResponseBody
.la source
L'annotation @RestController a été introduite au printemps 4.0 pour simplifier la création de services Web RESTful. Il s'agit d'une annotation pratique qui combine @Controller et @ResponseBody - ce qui élimine le besoin d'annoter chaque méthode de traitement des demandes de la classe contrôleur avec l'annotation @ResponseBody.
la source
@Controller
: Cette annotation est juste une version spécialisée de@Component
et elle permet aux classes de contrôleur d'être détectées automatiquement en fonction de l'analyse du chemin de classe.@RestController
: Cette annotation est une version spécialisée@Controller
qui ajoute@Controller
et@ResponseBody
annote automatiquement afin que nous n'ayons pas à ajouter@ResponseBody
à nos méthodes de mappage.la source
@Controller est utilisé dans les systèmes hérités qui utilisent des JSP. il peut renvoyer des vues. @RestController consiste à marquer que le contrôleur fournit des services REST avec le type de réponse JSON. il encapsule donc les annotations @Controller et @ResponseBody ensemble.
la source
@RestController
est la composition de@Controller
et@ResponseBody
, si nous n'utilisons pas la@ResponseBody
signature in Method, nous devons utiliser le@Restcontroller
.la source
Au lieu d'utiliser @Controller et @ResponseBody, @RestController vous permet d'exposer les API Rest dans Spring 4.0 et supérieur.
la source