Diferença entre primavera @Controller
e @RestController
anotação.
A @Controller
anotação pode ser usada para aplicativos Web MVC e REST?
Se sim, como podemos diferenciar se é um aplicativo Web MVC ou REST.
java
spring
spring-mvc
Srikanth
fonte
fonte
Thymeleaf
ele não funcionará@RestController
devido ao@ResponseBody
que está incluído nesta anotação.@ResponseBody
faz com que os objetos retornados para algo que poderia ser no corpo, por exemplo, JSON ou XML ( fonte )No código abaixo, mostrarei a diferença entre
@controller
e
@RestController
o
@ResponseBody
é ativado por padrão. Você não precisa adicioná-lo acima da assinatura da função.fonte
Se você usar,
@RestController
não poderá retornar uma exibição (usandoViewresolver
em Spring / springboot) e sim@ResponseBody
não é necessário neste caso.Se você usar,
@Controller
poderá retornar uma visualização no Spring Web MVC.fonte
@RestController
classes anotadas são as mesmas,@Controller
mas os@ResponseBody
métodos manipuladores estão implícitos.fonte
Na verdade, tenha cuidado - eles não são exatamente iguais.
Se você definir quaisquer interceptores no seu aplicativo, eles não se aplicarão aos Controladores anotados
@RestController
, pois eles funcionam com os@Controller
controladores anotados.ie configuração para o interceptador:
e na declaração de um controlador Spring:
Vai funcionar, no entanto
não acaba tendo o interceptador associado a ele.
fonte
@RestController
foi introduzido no Spring 4x. Essa anotação também é anotada por si mesma;@Controller
portanto, se não estiver funcionando como um@Controller
relatório, relate isso como um bug.Interceptor
a um@RestController
.Interceptor
a um@RestController
.Como você pode ver na documentação do Spring ( Documentação do Spring RestController ), a anotação Rest Controller é igual à anotação do Controller, mas assumindo que @ResponseBody está ativo por padrão, portanto, todo o json é analisado em objetos java.
fonte
A nova anotação @RestController no Spring4 +, que marca a classe como um controlador em que todo método retorna um objeto de domínio em vez de uma exibição. É uma abreviação de @Controller e @ResponseBody reunidos.
fonte
@RestController
foi fornecido desde a Primavera 4.0.1. Esses controladores indicam que aqui os métodos @RequestMapping assumem a semântica @ResponseBody por padrão.Nas versões anteriores, a funcionalidade semelhante poderia ser alcançada usando abaixo:
@RequestMapping
juntamente com@ResponseBody
como@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }
<mvc:annotation-driven/>
pode ser usado como uma das maneiras de usar JSON com Jackson ou xml.@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }
@ResponseBody
é tratado como a visualização aqui entre o MVC e é despachado diretamente, em vez de ser despachado do Dispatcher Servlet e os respectivos conversores convertem a resposta no formato relacionado, como text / html, application / xml, application / json.No entanto, o Restcontroller já está acoplado ao ResponseBody e aos respectivos conversores. Em segundo lugar, aqui, uma vez que, em vez de converter o corpo da resposta, ele é automaticamente convertido em resposta http.
fonte
@Controller
retornaView
.@RestController
retornaResponseBody
.fonte
A anotação @RestController foi introduzida no Spring 4.0 para simplificar a criação de serviços web RESTful. É uma anotação de conveniência que combina @Controller e @ResponseBody - o que elimina a necessidade de anotar todos os métodos de tratamento de solicitações da classe do controlador com a anotação @ResponseBody.
fonte
@Controller
: Esta anotação é apenas uma versão especializada@Component
e permite que as classes do controlador sejam detectadas automaticamente com base na varredura do caminho de classe.@RestController
: Esta anotação é uma versão especializada,@Controller
que adiciona@Controller
e@ResponseBody
anota automaticamente, para que não tenhamos que adicionar@ResponseBody
aos nossos métodos de mapeamento.fonte
O @Controller é usado em sistemas legados que usam JSPs. pode retornar visualizações. @RestController é para marcar que o controlador está fornecendo serviços REST com o tipo de resposta JSON. para agrupar as anotações @Controller e @ResponseBody.
fonte
@RestController
é composição de@Controller
e@ResponseBody
, se não estamos usando a@ResponseBody
assinatura no método, precisamos usar o@Restcontroller
.fonte
Em vez de usar o @Controller e o @ResponseBody, o @RestController permite expor as APIs Rest no Spring 4.0 e acima.
fonte