O técnico Carlos está implementando um web service REST que opera através do Hypertext Transfer Protocol (HTTP), de acordo com a especificação Java API for RESTful Web Services (JAX-RS) do Java Enterprise Edition 8. Carlos precisa customizar o retorno do método HTTP que solicita as opções de comunicação disponíveis para um determinado recurso web. Para implementar essa customização, Carlos deve criar um método de recurso que utilize a anotação do JAX-RS:
- A)@GET;
@GET serve para obter a representacao do recurso, nao para informar opcoes de comunicacao.
- B)@HEAD;
@HEAD responde com os cabecalhos de uma requisicao GET, mas sem corpo, nao sendo o verbo pedido no enunciado.
- C)@OPTIONS;
@OPTIONS eh a anotacao correta em JAX-RS para customizar a resposta ao metodo HTTP OPTIONS.
- D)@GetMapping;
@GetMapping pertence ao Spring MVC, nao ao JAX-RS.
- E)@RequestMapping.
@RequestMapping tambem eh do Spring MVC e nao e a anotacao especifica de JAX-RS para esse caso.
Gabarito: C
No JAX-RS, cada anotacao HTTP aponta para um tipo de operacao do recurso. Se voce quer atender a requisicao que pergunta quais metodos de comunicacao estao disponiveis para um recurso, a anotacao apropriada eh a que representa o verbo de consulta das opcoes aceitas pelo servidor. Isso cai muito em prova porque a banca mistura os verbos HTTP com as anotacoes do framework, entao vale decorar a correspondencia basica. A ideia do HTTP aqui eh simples: alguns metodos buscam dados, outros enviam, outros apenas perguntam o que o recurso aceita. Quando o cliente usa OPTIONS, ele quer saber os metodos suportados, os limites e outras informacoes de comunicacao do recurso. No JAX-RS, voce pode customizar essa resposta criando um metodo de recurso anotado justamente com o verbo correspondente a essa consulta. Por isso, o gabarito C esta correto: a anotacao @OPTIONS mapeia o metodo HTTP OPTIONS, usado para descrever as opcoes de comunicacao disponiveis para aquele recurso. Em termos praticos, isso permite ao desenvolvedor definir uma resposta personalizada em vez de deixar tudo no automatico do framework. As demais alternativas confundem verbos de requisicao com anotacoes de outros contextos. @GET serve para recuperar representacoes do recurso, enquanto @HEAD retorna os mesmos cabecalhos de GET, mas sem corpo. Ja @GetMapping e @RequestMapping sao anotacoes tipicas do Spring MVC, nao do JAX-RS do Java EE 8.