Obtendo Cabeçalhos HTTP Usando Objetos HttpHeaders
Usando o Java™ API for RESTful Web Services (JAX-RS), é possível usar o objeto HttpHeaders para acessar os cabeçalhos de pedido.
Sobre Esta Tarefa
Usando o objeto HttpHeaders introduzido com o ambiente de tempo de execução JAX-RS, as informações de cabeçalhos de pedido HTTP são conhecidas e disponibilizadas para modificação. A anotação @javax.ws.rs.core.Context indica que um objeto de contexto é introduzido. A interface javax.ws.rs.core.HttpHeaders é a interface do objeto que deseja introduzir.
Procedimento
Resultados
O método de recurso usa as informações a partir dos cabeçalhos HTTP que são enviadas no pedido para determinar uma resposta apropriada.
Exemplo
O seguinte exemplo mostra um recurso que retorna uma saudação diferente, dependendo da configuração do cabeçalho Accept-Language.
No seguinte fragmento de código, o parâmetro @Context HttpHeaders
é incluído na assinatura de método. Observe que a anotação @Context
e a declaração de tipo estão na lista de parâmetros do método
getGreeting.
import java.util.List;
import java.util.Locale;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
@Path("/contexttest")
public class HelloWorldInMyLanguage {
/**
* @return Returns the string in the preferred language.
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getGreeting(@Context HttpHeaders httpHeaders) {
List<Locale> locales = httpHeaders.getAcceptableLanguages();
if (locales.size() == 0) {
return "Hello!";
}
Locale locale = locales.get(0);
if (locale.equals(Locale.FRENCH)) {
return "Bonjour!";
} else if (locale.equals(Locale.GERMAN)) {
return "Guten Tag!";
} else {
return "Hello!";
}
}
}
Como alternativa, é possível escolher declarar a propriedade @Context
HttpHeaders httpHeaders como um campo na classe, como por exemplo:
import java.util.List;
import java.util.Locale;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
@Path("/contexttest")
public class HelloWorldInMyLanguage {
@Context
HttpHeaders httpHeaders;
/**
* @return Returns the string in the preferred language.
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getGreeting() {
List<Locale> locales = httpHeaders.getAcceptableLanguages();
if (locales.size() == 0) {
return "Hello!";
}
Locale locale = locales.get(0);
if (locale.equals(Locale.FRENCH)) {
return "Bonjour!";
} else if (locale.equals(Locale.GERMAN)) {
return "Guten Tag!";
} else {
return "Hello!";
}
}
}