Разница между весной @Controller
и @RestController
аннотацией.
Можно @Controller
ли использовать аннотации для приложений Web MVC и REST?
Если да, как мы можем отличить это приложение Web MVC или REST.
java
spring
spring-mvc
Srikanth
источник
источник
Thymeleaf
он не будет работать,@RestController
из-за@ResponseBody
чего включен в эту аннотацию.@ResponseBody
превращает возвращаемые объекты во что-то, что может находиться в теле, например, в JSON или XML ( источник )В приведенном ниже коде я покажу вам разницу между
@controller
а также
@RestController
@ResponseBody
активируется по умолчанию. Вам не нужно добавлять его над сигнатурой функции.источник
Если вы используете,
@RestController
вы не можете вернуть представление (с помощьюViewresolver
Spring / springboot) и да@ResponseBody
не требуется в этом случае.Если вы используете,
@Controller
вы можете вернуть представление в Spring Web MVC.источник
@RestController
аннотированные классы такие же , как ,@Controller
но@ResponseBody
по методам обработчика подразумевается.источник
На самом деле, будьте осторожны - они не совсем одинаковы.
Если вы определите какие-либо перехватчики в вашем приложении, они не будут применяться к аннотированным контроллерам
@RestController
, однако они работают с@Controller
аннотированными контроллерами.то есть. Конфигурация для перехватчика:
и в объявлении контроллера Spring:
Работать будет, однако
не заканчивается перехватчиком, связанным с ним.
источник
@RestController
был представлен весной 4х. Эта аннотация также аннотируется сама собой,@Controller
поэтому, если она не работает как,@Controller
то сообщите об этом как об ошибке.Interceptor
с@RestController
.Interceptor
к@RestController
.Как вы можете видеть в документации Spring ( Spring RestController Documentation ), аннотация Rest Controller аналогична аннотации Controller, но предполагается, что @ResponseBody активен по умолчанию, поэтому все json анализируются для объектов java.
источник
Новая аннотация @RestController в Spring4 +, которая помечает класс как контроллер, где каждый метод возвращает объект домена вместо представления. Это сокращение для @Controller и @ResponseBody, объединённых вместе.
источник
@RestController
был предоставлен с весны 4.0.1. Эти контроллеры указывают, что здесь методы @RequestMapping принимают семантику @ResponseBody по умолчанию.В более ранних версиях подобная функциональность могла быть достигнута при использовании ниже:
@RequestMapping
в сочетании с@ResponseBody
как@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }
<mvc:annotation-driven/>
может быть использован как один из способов использования JSON с Джексоном или XML.@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }
@ResponseBody
здесь рассматривается как представление в MVC, и оно отправляется напрямую, а не отправляется из сервлет-диспетчера, и соответствующие преобразователи преобразуют ответ в связанном формате, таком как text / html, application / xml, application / json.Тем не менее, Restcontroller уже связан с ResponseBody и соответствующими конвертерами. Во-вторых, здесь, поскольку вместо преобразования элемента ответа он автоматически преобразуется в http-ответ.
источник
@Controller
возвращаетсяView
.@RestController
возвращаетсяResponseBody
.источник
Аннотация @RestController была введена в Spring 4.0 для упрощения создания веб-сервисов RESTful. Это удобная аннотация, которая объединяет @Controller и @ResponseBody, что устраняет необходимость аннотировать каждый метод обработки запросов класса контроллера аннотацией @ResponseBody.
источник
@Controller
Эта аннотация является специализированной версией@Component
и позволяет автоматически определять классы контроллера на основе сканирования пути к классам.@RestController
: Эта аннотация представляет собой специализированную версию,@Controller
которая добавляет@Controller
и@ResponseBody
аннотацию автоматически, поэтому нам не нужно добавлять@ResponseBody
к нашим методам отображения.источник
@Controller используется в устаревших системах, в которых используются JSP. это может вернуть взгляды. @RestController означает, что контроллер предоставляет службы REST с типом ответа JSON. поэтому он объединяет аннотации @Controller и @ResponseBody вместе.
источник
@RestController
является составом@Controller
и@ResponseBody
, если мы не используем@ResponseBody
подпись в методе, то нам нужно использовать@Restcontroller
.источник
Вместо использования @Controller и @ResponseBody, @RestController позволяет вам выставлять API-интерфейсы отдыха в Spring 4.0 и выше.
источник