Pular para o conteúdo principal

Questão de Programação — Frameworks Java — CESPE / CEBRASPE 2023

ProgramaçãoFrameworks Java
Código
ce163366
Banca
CESPE / CEBRASPE
Órgão
TBG
Ano
2023
Nível
Superior
Cargo
Ênfase: Desenvolvimento de Software
Imagem associada para resolução da questãoA partir do código precedente, julgue o item subsecutivo, relativo a Spring.No Spring, a RestController é usada para marcar a classe como um controlador em que cada método retorna um objeto de domínio em vez de uma exibição.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Spring: a anotação @RestController

Gabarito: letra C (CERTO). A anotação @RestController no Spring é uma combinação de @Controller e @ResponseBody, e é usada para marcar uma classe como um controlador onde cada método retorna um objeto de domínio (geralmente serializado em JSON/XML) diretamente na resposta HTTP, em vez de retornar uma view (como um JSP ou Thymeleaf). Essa é a definição exata da anotação, e a afirmação da questão está correta.

O Spring Framework é um dos frameworks mais utilizados para desenvolvimento de aplicações Java, especialmente para aplicações web e microsserviços. Ele fornece uma série de anotações para facilitar o desenvolvimento, e @RestController é uma das mais importantes para construir APIs REST. Para entender por que a afirmação está correta, é preciso compreender a diferença entre @Controller e @RestController.

Um @Controller é uma anotação do Spring MVC que marca uma classe como um controlador. Os métodos dessa classe podem retornar o nome de uma view (como um arquivo JSP ou um template Thymeleaf), que será resolvido por um ViewResolver para gerar a resposta HTML. Para retornar dados diretamente (como JSON), é necessário anotar o método com @ResponseBody, que indica que o valor de retorno deve ser serializado e escrito diretamente no corpo da resposta HTTP.

A anotação @RestController foi introduzida no Spring 4.0 para simplificar a criação de APIs REST. Ela é uma anotação composta, ou seja, é meta-anotada com @Controller e @ResponseBody. Isso significa que, ao usar @RestController, todos os métodos da classe já são tratados como se tivessem @ResponseBody, eliminando a necessidade de anotar cada método individualmente. Portanto, cada método retorna um objeto de domínio que é automaticamente serializado (geralmente para JSON) e enviado na resposta.

Na prática, considere um exemplo simples:

@RestController
public class UsuarioController {
    @GetMapping("/usuario")
    public Usuario getUsuario() {
        return new Usuario("João", 30);
    }
}

Nesse caso, quando uma requisição GET é feita para /usuario, o Spring irá chamar o método getUsuario(), que retorna um objeto Usuario. Como a classe está anotada com @RestController, o Spring automaticamente serializa esse objeto para JSON e o envia como resposta, com o Content-Type apropriado (application/json). Se a classe fosse anotada apenas com @Controller, o Spring tentaria interpretar o retorno como o nome de uma view, o que causaria um erro, a menos que o método também fosse anotado com @ResponseBody.

A distinção entre @Controller e @RestController é um dos pontos mais cobrados em provas sobre Spring. A pegadinha clássica é afirmar que @RestController é usada para retornar views, ou que @Controller já retorna objetos de domínio diretamente. A questão em análise explora exatamente essa distinção, e a afirmação está correta ao dizer que @RestController é usada para marcar a classe como um controlador em que cada método retorna um objeto de domínio em vez de uma exibição.

Guarde essa fronteira: @Controller retorna views (a menos que combinado com @ResponseBody), enquanto @RestController retorna objetos de domínio diretamente. É exatamente nessa distinção que a questão se baseia.

1Anotação composta
@Controller
@ResponseBody
2Retorno dos métodos
Objeto de domínio
Serializado (JSON/XML)
Direto no corpo da resposta
3Uso
APIs REST
Sem ViewResolver
4Contraste
@Controller → retorna view
@Controller + @ResponseBody → objeto
@RestController (Spring 4.0+)
LEVELsoulevel.com.br
@RestController (Spring 4.0+): Anotação composta (@Controller, @ResponseBody); Retorno dos métodos (Objeto de domínio, Serializado (JSON/XML), Direto no corpo da resposta); Uso (APIs REST, Sem ViewResolver); Contraste (@Controller → retorna view, @Controller + @ResponseBody → objeto)

Alternativa C — ✅ Correto ⟵ GABARITO

A afirmação está correta. A anotação @RestController é uma anotação composta que combina @Controller e @ResponseBody. Isso significa que, ao marcar uma classe com @RestController, todos os métodos dessa classe retornam objetos de domínio que são serializados diretamente na resposta HTTP, em vez de retornar o nome de uma view. Essa é a definição padrão da anotação no Spring Framework, e a questão a descreve com precisão.

Spring Framework (documentação oficial):

@RestController é uma anotação de conveniência que combina @Controller e @ResponseBody, indicando que cada método retorna um objeto de domínio em vez de uma view.

A alternativa está correta porque descreve exatamente o propósito da anotação. Não há nenhum erro conceitual na afirmação.

Gabarito: letra C (CERTO).

Link permanente: /questoes/ce163366