我在服务实现中的每个方法都使用休息模板,有什么方法可以为休息模板创建实用程序类来传递 url 和请求参数?
感谢和问候
安妮塔·帕蒂尔
最佳答案
如果我添加了几乎所有的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");
}
}
关于spring - 如何使用休息模板维护休息调用的实用程序类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48077393/