Spring Boot 中的 RestTemplate 使用详解

Spring Boot

记一次 RestTemplate 使用详解,既有GET,又有POST,超详细


package com.demo.oauth.service;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;

import com.alibaba.fastjson.JSON;

/**
 * 认证系统
 * 
 * @author wzy
 *
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
@Service
public class OauthService {

	private final static String URL_SEND_TOKEN = "http://127.0.0.1:8080/user/verification/";
	private final static String URL_VERIFIY_TOKEN = "http://127.0.0.1:8080/user/verification/";
	private final static String URL_SING_UP = "http://127.0.0.1:8080/user/signUp";
	private final static String URL_KEEPUSER = "http://127.0.0.1:8080/user";
	private final static String URL_OAUTH_TOKEN = "http://127.0.0.1:8080/oauth/token";
	private final static String URL_CHANGE_PASSWORD = "http://127.0.0.1:8080/user/changePassword";
	private final static String URL_GET_RESET_PSW_TOKEN = "http://127.0.0.1:8080/user/resetPassword/";
	private final static String URL_RESET_PASSWORD = "http://127.0.0.1:8080/user/resetPassword";
	private final static Logger LOG = LoggerFactory.getLogger(OauthService.class);

	/**
	 * 请求验证短信
	 */
	public Map<String, Object> sendToken(Map<String, Object> paramMap) {
		// 返回给平台的
		Map<String, Object> resultMap = new HashMap<>();
		if (!paramMap.containsKey("clientId")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientId = (String) paramMap.get("clientId");
		if (!paramMap.containsKey("clientSecret")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientSecret = (String) paramMap.get("clientSecret");
		if (!paramMap.containsKey("phone")) {
			resultMap.put("success", "false");
			resultMap.put("message", "缺少手机号");
			return resultMap;
		}
		String mobile = (String) paramMap.get("phone");
		RestTemplate client = new RestTemplate();

		// 设置请求头
		StringBuilder sb = new StringBuilder();
		sb.append("Basic ");
		sb.append(new String(Base64.encodeBase64(new String(clientId + ":" + clientSecret).getBytes())));
		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("accept", "*/*");
		requestHeaders.add("authorization", sb.toString());
		HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
		try {
			ResponseEntity<Map> responseMap = client.exchange(URL_SEND_TOKEN + mobile, HttpMethod.GET, requestEntity,
					Map.class);
			if (responseMap.getStatusCodeValue() == 200) {
				resultMap.put("success", true);
				resultMap.put("errorCode", 0);
				resultMap.put("value", responseMap.getBody().get("payload"));
				LOG.info("【认证系统】发送短信,手机号为【{}】,接收到的验证码为【{}】", mobile, responseMap.getBody().get("payload"));
			} else {
				LOG.error("【认证系统】发送短信,手机号为【{}】,接收到的参数为{},上游返回结果{}", mobile, paramMap.toString(),
						responseMap.toString());
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
			}
		} catch (HttpClientErrorException e) {
			LOG.info("【认证系统】发送短信,手机号【{}】上游返回结果{}", mobile, e.getResponseBodyAsString());
			Map<String, String> responseBodyMap = JSON.parseObject(e.getResponseBodyAsString(), Map.class);

			if (!responseBodyMap.containsKey("error")) {
				LOG.error("【认证系统】发送短信异常,手机号【{}】", mobile);
				e.printStackTrace();
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			String error = responseBodyMap.get("error");

			resultMap.put("success", "false");
			resultMap.put("message", codeToMsg(error));
			return resultMap;
		} catch (Exception e) {
			LOG.error("【认证系统】发送短信异常,手机号【{}】", mobile);
			e.printStackTrace();
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}

		return resultMap;
	}

	/**
	 * 验证短信验证码
	 */
	public Map<String, Object> verifiyToken(Map<String, Object> paramMap) {
		// 返回给平台的
		Map<String, Object> resultMap = new HashMap<>();
		if (!paramMap.containsKey("clientId")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientId = (String) paramMap.get("clientId");
		if (!paramMap.containsKey("clientSecret")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientSecret = (String) paramMap.get("clientSecret");
		if (!paramMap.containsKey("phone")) {
			resultMap.put("success", "false");
			resultMap.put("message", "缺少手机号");
			return resultMap;
		}
		String mobile = (String) paramMap.get("phone");
		if (!paramMap.containsKey("code")) {
			resultMap.put("success", "false");
			resultMap.put("message", "缺少验证码");
			return resultMap;
		}
		String token = (String) paramMap.get("code");

		RestTemplate client = new RestTemplate();

		// 设置请求头
		StringBuilder sb = new StringBuilder();
		sb.append("Basic ");
		sb.append(new String(Base64.encodeBase64(new String(clientId + ":" + clientSecret).getBytes())));
		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("accept", "*/*");
		requestHeaders.add("Content-Type", "application/json");
		requestHeaders.add("authorization", sb.toString());
		HttpEntity<String> requestEntity = new HttpEntity<String>(token, requestHeaders);
		try {
			Map<String, Object> responseMap = client.postForObject(URL_VERIFIY_TOKEN + mobile, requestEntity,
					Map.class);
			LOG.info("【认证系统】验证短信验证码,手机号【{}】上游返回结果{}", mobile, responseMap.toString());
			if ("success".equals(responseMap.get("payload"))) {
				resultMap.put("success", true);
				resultMap.put("errorCode", 0);
			}
		} catch (HttpClientErrorException e) {
			LOG.info("【认证系统】验证短信验证码,手机号【{}】上游返回结果{}", mobile, e.getResponseBodyAsString());
			Map<String, String> responseBodyMap = JSON.parseObject(e.getResponseBodyAsString(), Map.class);

			if (!responseBodyMap.containsKey("error")) {
				LOG.error("【认证系统】验证短信验证码异常,手机号【{}】", mobile);
				e.printStackTrace();
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			String error = responseBodyMap.get("error");

			resultMap.put("success", "false");
			resultMap.put("message", codeToMsg(error));
			return resultMap;
		} catch (Exception e) {
			LOG.error("【认证系统】短信验证异常,手机号为【{}】", mobile);
			e.printStackTrace();
			resultMap.put("success", "false");
			resultMap.put("message", "短信验证失败");
			return resultMap;
		}
		return resultMap;
	}

	/**
	 * 注册
	 * 
	 * @param paramMap
	 * @return
	 */
	public Map<String, Object> singUp(Map<String, Object> paramMap) {
		// 返回给平台的
		Map<String, Object> resultMap = new HashMap<>();

		if (!paramMap.containsKey("clientId")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientId = (String) paramMap.get("clientId");

		if (!paramMap.containsKey("clientSecret")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientSecret = (String) paramMap.get("clientSecret");

		if (!paramMap.containsKey("phone")) {
			resultMap.put("success", "false");
			resultMap.put("message", "缺少手机号");
			return resultMap;
		}
		String mobile = (String) paramMap.get("phone");

		if (!paramMap.containsKey("verified")) {
			resultMap.put("success", "false");
			resultMap.put("message", "用户未验证");
			return resultMap;
		}
		Boolean verified = (Boolean) paramMap.get("verified");
		if (!(verified == true)) {
			resultMap.put("success", "false");
			resultMap.put("message", "用户未验证");
			return resultMap;
		}

		if (!paramMap.containsKey("loginPassword")) {
			resultMap.put("success", "false");
			resultMap.put("message", "缺少密码");
			return resultMap;
		}
		String password = (String) paramMap.get("loginPassword");

		if (!paramMap.containsKey("loginPassword")) {
			resultMap.put("success", "false");
			resultMap.put("message", "缺少确认密码");
			return resultMap;
		}
		String matchingPassword = (String) paramMap.get("loginPassword");

		// 发送给认证系统参数
		Map<String, Object> map = new HashMap<>();
		map.put("mobile", mobile);
		map.put("password", password);
		map.put("matchingPassword", matchingPassword);
		map.put("verified", verified.toString());
		String mapStr = JSON.toJSONString(map);

		RestTemplate client = new RestTemplate();

		// 设置请求头
		StringBuilder sb = new StringBuilder();
		sb.append("Basic ");
		sb.append(new String(Base64.encodeBase64(new String(clientId + ":" + clientSecret).getBytes())));
		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("accept", "*/*");
		requestHeaders.add("Content-Type", "application/json");
		requestHeaders.add("authorization", sb.toString());
		HttpEntity<String> requestEntity = new HttpEntity<String>(mapStr, requestHeaders);
		try {
			Map<String, Object> responseMap = client.postForObject(URL_SING_UP, requestEntity, Map.class);
			LOG.info("【认证系统】注册成功,手机号【{}】上游返回结果{}", mobile, responseMap.toString());
			
			if (!responseMap.containsKey("payload")) {
				LOG.error("【认证系统】注册异常,手机号【{}】,缺少payload", mobile);
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			
			Map<String, Object> payloadMap = (Map<String, Object>) responseMap.get("payload");
			
			if (!payloadMap.containsKey("userInfo")) {
				LOG.error("【认证系统】注册异常,手机号【{}】,缺少userInfo", mobile);
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			
			Map<String, Object> userInfoMap = (Map<String, Object>) payloadMap.get("userInfo");
			
			if (!userInfoMap.containsKey("id")) {
				LOG.error("【认证系统】注册异常,手机号【{}】,缺少id", mobile);
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			resultMap.put("success", true);
			resultMap.put("value", String.valueOf(userInfoMap.get("id")));
			
		} catch (HttpClientErrorException e) {
			LOG.info("【认证系统】注册异常,手机号【{}】上游返回结果{}", mobile, e.getResponseBodyAsString());
			Map<String, String> responseBodyMap = JSON.parseObject(e.getResponseBodyAsString(), Map.class);

			if (!responseBodyMap.containsKey("error")) {
				LOG.error("【认证系统】注册异常,手机号【{}】", mobile);
				e.printStackTrace();
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			String error = responseBodyMap.get("error");

			resultMap.put("success", "false");
			resultMap.put("message", codeToMsg(error));
			return resultMap;
		} catch (Exception e) {
			LOG.error("【认证系统】注册异常");
			e.printStackTrace();
			resultMap.put("success", "false");
			resultMap.put("message", "注册失败");
			return resultMap;
		}
		LOG.info("【认证系统】注册成功,返回主服务【{}】", resultMap.toString());
		return resultMap;
	}

	/**
	 * 第一次登录同时获取token
	 * 
	 * @param paramMap
	 * @return
	 */
	public Map<String, Object> oauthToken(Map<String, Object> paramMap) {
		// 返回给平台的
		Map<String, Object> resultMap = new HashMap<>();

		if (!paramMap.containsKey("clientId")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientId = (String) paramMap.get("clientId");

		if (!paramMap.containsKey("clientSecret")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientSecret = (String) paramMap.get("clientSecret");

		if (!paramMap.containsKey("phone")) {
			resultMap.put("success", "false");
			resultMap.put("message", "账号不能为空");
			return resultMap;
		}
		String username = (String) paramMap.get("phone");

		if (!paramMap.containsKey("loginPassword")) {
			resultMap.put("success", "false");
			resultMap.put("message", "密码不能为空");
			return resultMap;
		}
		String password = (String) paramMap.get("loginPassword");
		if (StringUtils.isBlank(password)) {
			resultMap.put("success", "false");
			resultMap.put("message", "密码不能为空");
			return resultMap;
		}

		StringBuilder sb = new StringBuilder();

		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("Accept", "application/json, application/x-www-form-urlencoded");
		requestHeaders.add("Content-Type", "application/x-www-form-urlencoded");
		HttpEntity<String> requestEntity = new HttpEntity<String>(sb.toString(), requestHeaders);
		RestTemplate client = new RestTemplate();
		try {
			Map<String, Object> responseMap = client.postForObject(URL_OAUTH_TOKEN, requestEntity, Map.class);
			if (!responseMap.containsKey("access_token")) {
				LOG.error("【认证系统】第一次登录同时获取token异常,没有access_token,手机号【{}】,上游返回结果{}", username, responseMap.toString());
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			resultMap.put("success", true);
			resultMap.put("value", (String) responseMap.get("access_token"));
			LOG.info("【认证系统】第一次登录同时获取token,手机号【{}】,token为【{}】", username, (String) responseMap.get("access_token"));
		} catch (HttpClientErrorException e) {
			LOG.info("【认证系统】第一次登录同时获取token异常,手机号【{}】,上游返回结果{}", username, e.getResponseBodyAsString());
			Map<String, String> responseBodyMap = JSON.parseObject(e.getResponseBodyAsString(), Map.class);

			if (!responseBodyMap.containsKey("error")) {
				LOG.error("【认证系统】第一次登录同时获取token异常,手机号【{}】,上游返回结果{}", username, e.getResponseBodyAsString());
				e.printStackTrace();
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			String error = responseBodyMap.get("error");

			resultMap.put("success", "false");
			resultMap.put("message", codeToMsg(error));
			return resultMap;
		} catch (Exception e) {
			LOG.error("【认证系统】第一次登录同时获取token异常,手机号【{}】", username);
			e.printStackTrace();
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}

		return resultMap;
	}

	/**
	 * 保持用户登录
	 * 
	 * @param paramMap
	 * @return
	 */
	public Map<String, Object> keepUser(Map<String, Object> paramMap) {
		// 返回给平台的
		Map<String, Object> resultMap = new HashMap<>();

		if (!paramMap.containsKey("oauthAccessToken")) {
			resultMap.put("success", "false");
			resultMap.put("message", "身份已过期,请重新登录");
			return resultMap;
		}
		String token = (String) paramMap.get("oauthAccessToken");

		RestTemplate client = new RestTemplate();

		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("accept", "*/*");
		requestHeaders.add("authorization", "Bearer " + token);

		HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
		try {
			ResponseEntity<Map> response = client.exchange(URL_KEEPUSER, HttpMethod.GET, requestEntity, Map.class);
			if (response.getStatusCodeValue() == 200) {
				Map<String, Object> responseMap = response.getBody();
				resultMap.put("success", true);
				resultMap.put("value", responseMap);
				LOG.info("【认证系统】保持用户登录{}", responseMap.toString());
			}
		} catch (HttpClientErrorException e) {
			LOG.info("【认证系统】保持用户登录,上游返回结果{}", e.getResponseBodyAsString());
			Map<String, String> responseBodyMap = JSON.parseObject(e.getResponseBodyAsString(), Map.class);

			if (!responseBodyMap.containsKey("error")) {
				LOG.error("【认证系统】保持用户登录异常,上游返回结果{}", e.getResponseBodyAsString());
				e.printStackTrace();
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			String error = responseBodyMap.get("error");

			resultMap.put("success", "false");
			resultMap.put("message", codeToMsg(error));
			return resultMap;
		} catch (Exception e) {
			LOG.error("【认证系统】保持用户登录异常");
			e.printStackTrace();
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		return resultMap;
	}

	/**
	 * 修改密码
	 * 
	 * @param paramMap
	 * @return
	 */
	public Map<String, Object> changePassword(Map<String, Object> paramMap) {
		// 返回给平台的
		Map<String, Object> resultMap = new HashMap<>();

		if (!paramMap.containsKey("oauthAccessToken")) {
			resultMap.put("success", "false");
			resultMap.put("message", "信息已过期请重新登录");
			return resultMap;
		}
		String token = (String) paramMap.get("oauthAccessToken");

		if (!paramMap.containsKey("oldPassword")) {
			resultMap.put("success", "false");
			resultMap.put("message", "旧密码不能为空");
			return resultMap;
		}
		String oldPassword = (String) paramMap.get("oldPassword");

		if (!paramMap.containsKey("password")) {
			resultMap.put("success", "false");
			resultMap.put("message", "新密码不能为空");
			return resultMap;
		}
		String password = (String) paramMap.get("password");

		if (!paramMap.containsKey("newPassword")) {
			resultMap.put("success", "false");
			resultMap.put("message", "确认新密码不能为空");
			return resultMap;
		}
		String matchingPassword = (String) paramMap.get("newPassword");

		if (!password.equals(matchingPassword)) {
			resultMap.put("success", "false");
			resultMap.put("message", "两次密码不一致");
			return resultMap;
		}

		RestTemplate client = new RestTemplate();

		Map<String, String> map = new HashMap<>();
		map.put("oldPassword", oldPassword);
		map.put("password", password);
		map.put("matchingPassword", matchingPassword);

		String mapStr = JSON.toJSONString(map);

		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("accept", "*/*");
		requestHeaders.add("Content-Type", "application/json");
		requestHeaders.add("authorization", "Bearer " + token);
		HttpEntity<String> requestEntity = new HttpEntity<String>(mapStr, requestHeaders);

		try {
			Map<String, Object> responseMap = client.postForObject(URL_CHANGE_PASSWORD, requestEntity, Map.class);
			LOG.info("【认证系统】修改密码,上游返回结果{}", responseMap.toString());
			if ("success".equals(responseMap.get("payload"))) {
				resultMap.put("success", true);
				resultMap.put("errorCode", 0);
			}
		} catch (HttpClientErrorException e) {
			LOG.info("【认证系统】修改密码异常,上游返回结果{}", e.getResponseBodyAsString());
			Map<String, String> responseBodyMap = JSON.parseObject(e.getResponseBodyAsString(), Map.class);

			if (!responseBodyMap.containsKey("error")) {
				LOG.error("【认证系统】修改密码异常");
				e.printStackTrace();
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			String error = responseBodyMap.get("error");

			resultMap.put("success", "false");
			resultMap.put("message", codeToMsg(error));
			return resultMap;
		} catch (Exception e) {
			LOG.error("【认证系统】修改密码异常");
			e.printStackTrace();
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}

		return resultMap;
	}

	/**
	 * 获取重置密码Token
	 * 
	 * @return
	 */
	public Map<String, Object> getResetPswToken(Map<String, Object> paramMap) {
		// 返回给平台的
		Map<String, Object> resultMap = new HashMap<>();
		if (!paramMap.containsKey("clientId")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientId = (String) paramMap.get("clientId");
		if (!paramMap.containsKey("clientSecret")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientSecret = (String) paramMap.get("clientSecret");
		if (!paramMap.containsKey("phone")) {
			resultMap.put("success", "false");
			resultMap.put("message", "缺少手机号");
			return resultMap;
		}
		String mobile = (String) paramMap.get("phone");

		RestTemplate client = new RestTemplate();
		StringBuilder sb = new StringBuilder();
		sb.append("Basic ");
		sb.append(new String(Base64.encodeBase64(new String(clientId + ":" + clientSecret).getBytes())));
		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("accept", "*/*");
		requestHeaders.add("authorization", sb.toString());

		HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);

		try {
			ResponseEntity<Map> response = client.exchange(URL_GET_RESET_PSW_TOKEN + mobile, HttpMethod.GET,
					requestEntity, Map.class);
			Map<String, Object> responseMap = response.getBody();
			if (!responseMap.containsKey("payload")) {
				LOG.error("【认证系统】获取重置密码Token异常,手机号【{}】,上游返回结果{}", mobile, responseMap.toString());
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,请稍后再试");
				return resultMap;
			}
			LOG.info("【认证系统】获取重置密码Token,手机号【{}】,上游返回结果{}", mobile, responseMap.toString());
			String payload = (String) responseMap.get("payload");
			resultMap.put("success", "true");
			resultMap.put("value", payload);
		} catch (HttpClientErrorException e) {
			LOG.info("【认证系统】获取重置密码Token异常,手机号【{}】上游返回结果{}", mobile, e.getResponseBodyAsString());
			Map<String, String> responseBodyMap = JSON.parseObject(e.getResponseBodyAsString(), Map.class);

			if (!responseBodyMap.containsKey("error")) {
				LOG.error("【认证系统】获取重置密码Token异常,手机号【{}】", mobile);
				e.printStackTrace();
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			String error = responseBodyMap.get("error");

			resultMap.put("success", "false");
			resultMap.put("message", codeToMsg(error));
			return resultMap;
		} catch (Exception e) {
			LOG.error("【认证系统】获取重置密码Token异常,手机号【{}】", mobile);
			e.printStackTrace();
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}

		return resultMap;
	}

	/**
	 * 重置密码
	 * 
	 * @param paramMap
	 * @return
	 */
	public Map<String, Object> resetPassword(Map<String, Object> paramMap) {
		// 返回给平台的
		Map<String, Object> resultMap = new HashMap<>();
		if (!paramMap.containsKey("clientId")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientId = (String) paramMap.get("clientId");
		if (!paramMap.containsKey("clientSecret")) {
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,稍后再试");
			return resultMap;
		}
		String clientSecret = (String) paramMap.get("clientSecret");

		if (!paramMap.containsKey("phone")) {
			resultMap.put("success", "false");
			resultMap.put("message", "手机号不能为空");
			return resultMap;
		}
		String mobile = (String) paramMap.get("phone");

		if (!paramMap.containsKey("oauthAccessToken")) {
			LOG.error("【认证系统】重置密码异常,手机号【{}】,缺少Token", mobile);
			resultMap.put("success", "false");
			resultMap.put("message", "服务器繁忙,请稍后再试");
			return resultMap;
		}
		String token = (String) paramMap.get("oauthAccessToken");

		if (!paramMap.containsKey("password")) {
			resultMap.put("success", "false");
			resultMap.put("message", "密码不能为空");
			return resultMap;
		}
		String password = (String) paramMap.get("password");

		if (!paramMap.containsKey("password")) {
			resultMap.put("success", "false");
			resultMap.put("message", "确认密码不能为空");
			return resultMap;
		}
		String matchingPassword = (String) paramMap.get("password");

		RestTemplate client = new RestTemplate();
		Map<String, String> map = new HashMap<>();
		map.put("mobile", mobile);
		map.put("password", password);
		map.put("matchingPassword", matchingPassword);
		map.put("token", token);

		String mapStr = JSON.toJSONString(map);

		StringBuilder sb = new StringBuilder();
		sb.append("Basic ");
		sb.append(new String(Base64.encodeBase64(new String(clientId + ":" + clientSecret).getBytes())));
		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("accept", "*/*");
		requestHeaders.add("Content-Type", "application/json");
		requestHeaders.add("authorization", sb.toString());
		HttpEntity<String> requestEntity = new HttpEntity<String>(mapStr, requestHeaders);

		try {
			Map<String, Object> responseMap = client.postForObject(URL_RESET_PASSWORD, requestEntity, Map.class);
			LOG.info("【认证系统】重置密码成功,手机号【{}】上游返回结果{}", mobile, responseMap.toString());
			if ("success".equals(responseMap.get("payload"))) {
				resultMap.put("success", true);
				resultMap.put("errorCode", 0);
			}
		} catch (HttpClientErrorException e) {
			LOG.info("【认证系统】重置密码异常,上游返回结果{}", e.getResponseBodyAsString());
			Map<String, String> responseBodyMap = JSON.parseObject(e.getResponseBodyAsString(), Map.class);

			if (!responseBodyMap.containsKey("error")) {
				LOG.error("【认证系统】重置密码异常");
				e.printStackTrace();
				resultMap.put("success", "false");
				resultMap.put("message", "服务器繁忙,稍后再试");
				return resultMap;
			}
			String error = responseBodyMap.get("error");

			resultMap.put("success", "false");
			resultMap.put("message", codeToMsg(error));
			return resultMap;
		} catch (Exception e) {
			LOG.error("【认证系统】重置密码异常,手机号为【{}】", mobile);
			e.printStackTrace();
			resultMap.put("success", "false");
			resultMap.put("message", "重置密码失败");
			return resultMap;
		}

		return resultMap;
	}

	/**
	 * 错误码转信息
	 * 
	 * @param code
	 * @return
	 */
	private static String codeToMsg(String code) {
		Map<String, String> map = new HashMap<>();
		map.put("token_blocked", "验证码获取频繁");
		map.put("invalid_token", "验证码错误");
		map.put("user_already_exist", "用户已存在");
		map.put("invalid_password", "无效的密码");
		map.put("password_no_change", "请不要与旧密码相同");
		
		return map.getOrDefault(code, "服务器繁忙,稍后再试");
	}

}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaRestTemplateSpring框架提供的一个用于访问RESTful服务的客户端工具。它提供了一组用于HTTP请求的方法,使得我们能够方便地与RESTful服务进行交互。下面是使用RestTemplate的详细步骤。 1. 引入依赖 在pom.xml文件引入RestTemplate依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.3.0.RELEASE</version> </dependency> ``` 2. 创建RestTemplate对象 可以通过Spring的依赖注入来创建RestTemplate对象,也可以直接new一个对象。下面是使用依赖注入创建RestTemplate对象的示例: ``` @Autowired private RestTemplate restTemplate; ``` 3. 发送HTTP请求 RestTemplate提供了多种发送HTTP请求的方法,包括GET、POST、PUT、DELETE等。这里以GET请求为例: ``` String url = "http://example.com/get?param1=value1&param2=value2"; String result = restTemplate.getForObject(url, String.class); ``` 其,url是请求的URL地址,result是响应的字符串。getForObject()方法会将响应的JSON字符串转换成Java对象并返回。 4. 发送带有参数的HTTP请求 可以通过RestTemplate的exchange()方法发送带有参数的HTTP请求: ``` String url = "http://example.com/post"; MultiValueMap<String, String> params= new LinkedMultiValueMap<>(); params.add("param1", "value1"); params.add("param2", "value2"); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers); String result = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class).getBody(); ``` 其,url是请求的URL地址,params是请求的参数,headers是请求头,requestEntity是请求体,result是响应的字符串。 5. 发送带有请求体的HTTP请求 可以通过RestTemplate的postForObject()方法发送带有请求体的HTTP请求: ``` String url = "http://example.com/post"; String requestJson = "{\"param1\":\"value1\",\"param2\":\"value2\"}"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<String> requestEntity = new HttpEntity<>(requestJson, headers); String result = restTemplate.postForObject(url, requestEntity, String.class); ``` 其,url是请求的URL地址,requestJson是请求的JSON字符串,headers是请求头,requestEntity是请求体,result是响应的字符串。 6. 处理响应 RestTemplate发送的HTTP请求的响应可以是字符串、字节数组、输入流、Java对象等。可以根据需要选择不同的处理方式: ``` // 响应为字符串 String result = restTemplate.getForObject(url, String.class); // 响应为字节数组 byte[] result = restTemplate.getForObject(url, byte[].class); // 响应为输入流 InputStream result = restTemplate.getForObject(url, InputStream.class); // 响应为Java对象 Response response = restTemplate.getForObject(url, Response.class); ``` 这里的Response是一个Java对象,它的属性与响应的JSON字符串对应。可以通过使用Jackson等JSON转换框架将JSON字符串转换成Java对象。 以上就是使用RestTemplate发送HTTP请求的详细步骤。需要注意的是,RestTemplate处理HTTP请求时,会抛出一些异常,例如HttpStatusCodeException、ResourceAccessException等,需要进行适当的异常处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值