我在服务实现中为每个方法使用rest模板有没有办法为rest模板创建实用程序类来传递url和请求参数?
谢谢&此致
Anita patil
答案 0 :(得分:0)
请参考此代码片段,我已经添加了几乎所有的http方法
package com.util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
@Service
public class HttpService
{
private static final Logger logger = LogManager.getLogger(HttpService.class);
private final RestTemplate restTemplate;
@Autowired
public HttpService(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
/**
* The simple get request
* @param url - url need to call
* @return
*/
public ResponseEntity get(String url)
{
return restTemplate.getForEntity(url, String.class);
}
/**
*
* @param builder - contain url and request parameter
* @return
*/
public ResponseEntity get(UriComponentsBuilder builder)
{
return restTemplate.getForEntity(builder.build().toUri(), String.class);
}
/**
* The get request with request parameters
* @param builder - Uri builder contain url and request parameter
* @param httpHeaders - header need to send
* @return
*/
public ResponseEntity get(UriComponentsBuilder builder, HttpHeaders httpHeaders){
HttpEntity<?> entity = new HttpEntity<>(httpHeaders);
return restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, entity, String.class);
}
public <T> ResponseEntity<T> get(UriComponentsBuilder builder, HttpHeaders httpHeaders, Class<T> responseType){
HttpEntity<HttpHeaders> entity = new HttpEntity<>(httpHeaders);
return restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, entity, responseType);
}
/**
* The get method can be use for sending http get request with header parameter
* @param url - request url that need to call
* @param headers - header that need to send.
* @return
*/
public ResponseEntity get(String url, HttpHeaders headers){
HttpEntity<String> entity= new HttpEntity<>(headers);
return restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
}
/**
* The post method can use for post request with Request entity and Header
* The response will be return in response type class
* For passing header we need pass header in HttpEntity along with class that has to be send in request.
* example HttpEntity(object,header)
* For calling post with header only then we need to pass HttpEntity with header
* example HttpEntity(header);
* @param builder
* @param entity
* @param response
* @param <T>
* @param <P>
* @return
*/
public <T,P> T post(UriComponentsBuilder builder, HttpEntity<P> entity, Class<T> response){
return restTemplate.postForObject(builder.build().toUri(), entity, response);
}
public void put() throws Exception
{
throw new Exception("not implemeted yet, implement when required");
}
}
&#13;