Conceitos básicos
Spring Resttemplate é um cliente fornecido pela Spring para acessar serviços de repouso. O RestTemplate fornece uma variedade de acesso conveniente a serviços HTTP remotos, que podem melhorar bastante a eficiência de escrita do cliente. Portanto, muitos clientes como Android ou provedores de serviços de terceiros usam Resttemplate para solicitar serviços RESTful.
O Resttemplata da Spring-Web é um encapsulamento do HTTP subjacente de Java. Os usuários que usam Resttemplata não podem mais prestar atenção ao estabelecimento de conexão subjacente. Resttemplata não apenas suporta a especificação REST, mas também define o tipo de objeto de valor de retorno.
Em uso, você pode diretamente novo um objeto Resttemplate. Haverá alguns conversores de mensagens que retornam mensagens no objeto Resttemplate que criamos. Você pode encontrar o conversor correspondente com base no MediaType dos dados retornados e executar a conversão do MediaType. Você também pode criar um conversor de mensagens, criar uma classe que herda a classe AbstractGenerichTtpMessageConverter <T> ou implementa a interface httpmessageConverter <T>. Deve -se notar que o método do CanRead e o método de canwrite devem ser julgados por si mesmo, escreva parâmetros no fluxo no método Write Internal ou Write e obtenha o resultado retornado do corpo do fluxo no método ReadInternal ou Read and Type.
O objeto RestTemplate cria solicitações HTTP na parte inferior usando a implementação no pacote java.net. Você pode especificar diferentes métodos de solicitação HTTP usando o clientHttPreQuestFactory.
A interface clientHttPrequestFactory fornece principalmente dois métodos de implementação:
O Resttemplate usa o SimpleClientHttPrequestFactory por padrão e chama internamente o HTTPConnection para ligar para o JDK. O tempo limite padrão é -1. Podemos definir o tempo limite.
SimpleClientHttPrequestFactory Factory = new SimpleClientHttPrequestFactory (); // Defina o tempo limite da conexão, unidade milissegundo factory.setConnectTimeout (5000); // Defina o tempo lim de leitura, unidade milissegundo factory.etReadtimeout (10000); RestTemplate RestTemplate = new RestTemplate (Factory);
Use solicitações Get:
String url = "http: // localhost: 80/mandy/login.json?
Resttemplate Código fonte:
@Override public <T> t GetForObject (URL da String, classe <T> ResponseType, Object ... urlvariables) lança RestClientException {requestCallback requestCallback = AcepTheadeRRequestCallback (ResponseType); HttpmessageConverterextractor <T> Responsextractor = new HttpMessageConVerterextractor <T> (Responsetype, getMessageConverters (), Logger); Return Execute (URL, httpmethod.get, requestCallback, Responsextractor, urlvariables); }É melhor usar a solicitação GET para consumir os parâmetros diretamente no endereço. Eu não sei por quê. Se você usar o terceiro parâmetro, mesmo o tipo multivaluemap não funcionará (algumas pessoas na internet dizem que o uso do tipo multivaluemap está ok, mas eu tentei, mas não funcionará)
Use solicitação de postagem:
Hashmap <string, object> map = new hashmap <string, object> (); map.put ("nome", "teste"); map.put ("conta", "qwer"); map.put ("senha", "qwer"); ObjectMapper Mapper = new ObjectMapper (); String jSonstr = null; tente {jSonstr = mapper.WriteValuEasString (map); } catch (Exceção e) {e.printStackTrace (); } // Crie entidade do cabeçalho HTTP e preencha as informações do cabeçalho, como formato de dados httpheaders httpheaders = new httpheaders (); httpheaders.setContentType (MediaType.Application_Json_Utf8); // Criar entidade HTTP, você pode usar diretamente o construtor para colocar o corpo de solicitação e o cabeçalho da solicitação em httpentity <string> httPentity = New HttPentity <tring> (jSonsTr2, httPentity = New HttPentity <String> (JSonsTr2, httPentity = New HttPentity <String> (JSOnsTR2, httPentity = New HttTity <String> (JSonsTr2, httPentity = New Htttity <String> (JSSONSTR2, "http: // localhost: 80/mandy/user_enable.json"; // chamando o método para solicitar resultado res2 = RestTemplate.PostFoBject (URL, httpentity, resultado.class);Resttemplate Código fonte:
@Override public <T> t PostForObject (URL da String, solicitação de objeto, classe <T> ResponseType, Object ... urivariable) lança RestClientException {requestCallback requestCallback = httpentityCallback (request, responseType); HttpmessageConverterextractor <T> Responsextractor = new HttpMessageConVerterextractor <T> (Responsetype, getMessageConverters (), Logger); Return Execute (URL, httpmethod.post, requestcallback, ResponseExtractor, urivariáveis); }Use solicitações de put:
Hashmap <string, object> map = new hashmap <string, object> (); map.put ("user_id", "1"); map.put ("habilitar", 0); objectMapper mapper = new objectMapper (); string jSonstr = null; try {jSonstr =SPRPper.WriteValuEESception; E.PrintStackTrace ();} // Crie entidade do cabeçalho HTTP e preencha as informações do cabeçalho, como formato de dados httpheaders httpheaders = new httpheaders (); htppheaders.setContentType (mediaType.Application_Json_utf8); // Create Httpentity <string> httpentity = new httpentity <string> (jSonstr, httpheaders); String url = "http: // localhost: 80/mandy/user_enable.json"; Resttemplate.put (url, httpentity);Resttemplate Código fonte:
@Override public void put (URL da string, solicitação de objeto, objeto ... urlvariables) lança RestClientException {requestCallback requestCallback = httpentityCallback (request); execute (url, httpmethod.put, requestcallback, null, urlvariables); }Uma pequena desvantagem desse método é que não há valor de retorno do resultado da solicitação. Se você precisar usar o valor de retorno, não poderá usar esse método.
Se você deseja usar uma solicitação de tipo de exclusão, existem apenas os seguintes tipos na coluna do parâmetro do método de put de Resttemplate
@OverridePublic void Delete (URL da String, objeto ... urlvariables) lança RestClientException {Execute (url, httpmethod.Delete, null, null, urlvariable);}@substituir o vazio de vazio (url string, map <string,? Httpmethod.delete, null, null, urlvariabels);}@substituir o void de vlot (URI URL) lança RestClientException {Execute (url, httpmethod.delete, null, null);}Esses métodos não nos fornecem parâmetros e vamos colocar o conteúdo do corpo da solicitação; portanto, se você deseja usar o método de exclusão fornecido pelo Resttemplate diretamente, a interface deve usar o estilo RESTful, colocar os parâmetros no endereço e obter os parâmetros através da anotação @PathVariable (value = "").
Ponto -chave: De fato, podemos usar diretamente o método de troca de Resttemplate, como segue
@OverridePublic <T> Responsabilidade <T> Exchange (URL da String, Método HttpMethod, HttPentity <?> Requestentity, classe <T> ResponseType, Object ... uriivariables) lança RestClientException {requestCallback requestCallback = httpentityCallback (request -senty); Responsextractor <ResponseEntity <T>> Responsextractor = ResponseIntityExtractor (ResponseType); Return Execute (URL, Método, RequestCallback, Responsextractor, Uivariables);}Aqui listamos apenas um método. Os outros podem ser encontrados no código -fonte. Este método pode fazer todos os tipos de solicitações.
Neste método, o parâmetro do método pode ser obtido através da enumeração httpMethod. O parâmetro de solicitação é a entidade httpentity encapsulada por si mesma, incluindo o corpo da solicitação e o cabeçalho da solicitação. O parâmetro ResponseType é uma classe de mapeamento que retorna o resultado. O parâmetro de urivariáveis me dá a impressão de que é inútil (opinião pessoal). O acesso à interface de retorno de solicitação pode ser obtido através do método getBody () do valor de retorno do método.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.