Classe @Controller + @RestController no Spring

3 respostas
L

Galera,

Um controller de spring pode ser @Controller mvc e @RestController ao mesmo tempo? Existe alguma forma de implementar na mesma classe as duas funcionalidades, mesmo que não seja com essas anotações? O código abaixo é uma tentativa que fiz com o guia no site do spring para ilustrar o que eu quero fazer. Ele não funciona, só responde como @RestController.

`@Controller

@RestController

public class GreetingController {

private static final String template = Hello, %s!;

private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
    model.addAttribute("name", name);
    return "greeting";
}

@RequestMapping("/greeting2")
public Greeting greeting2(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
    return new Greeting(counter.incrementAndGet(),
            String.format(template, name));    	
}

}`

Alguma ideia? Valeu!

3 Respostas

ramilani12

Olá
A diferença;
@Controller: é usado para sinalizar que a classe é um MVC Controller do Spring.
@RestController: Esta anotação adiciona automaticamente a anotação @Controller e @ResponseBody e não faz nada além disso, e neste caso todo retorno do serviço será transformado para um JSON.

Porém no seu caso é mais indicado usar o @Controller caso vc redirecione para alguma view.
Se sua classe só provê serviços REST é indicado usar @RestController.

L

Opa!

obrigado pela resposta! Entendi o que você disse, acabei encontrando na documentação do Spring (RTFM!) algo parecido que me esclareceu. No meu caso, eu queria escrever somente uma classe Controller que tratasse tanto as requisições REST quanto as requisições web. Consegui resolver o problema com content negotiation: para cada valor possível do header “Accept”, eu tenho um método que retorna de acordo. Valeu!!!

Gian_Batista

Eu fiquei hoje o dia inteiro tentando abrir minha view com a annotation @ResController. kkkkkk
Obrigado pela resposta aí meu brother!

Criado 28 de abril de 2016
Ultima resposta 10 de fev. de 2020
Respostas 3
Participantes 3