如何使用rest模板维护休息调用的实用程序类?

时间:2018-01-03 12:26:30

标签: spring rest

我在服务实现中为每个方法使用rest模板有没有办法为rest模板创建实用程序类来传递url和请求参数?

谢谢&此致

Anita patil

1 个答案:

答案 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;
&#13;
&#13;