RestTemplate发送请求使用总结

一、注入RestTemplate配置类

/**
 * Rest配置类
 */
@Configuration
public class RestTemplateConfiguration {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

二、使用方法

@Service
public class DinersService {
    @Resource
    private RestTemplate restTemplate;
    @Value("${service.name.ms-oauth-server}")
    private String oAuthServerName;
    @Resource
    private OAuth2ClientConfiguration oAuth2ClientConfiguration;

    /**
     * 登录
     * @param account
     * @param password
     * @param path
     * @return
     */
    public ResultInfo signIn(String account, String password, String path) {
        // 参数校验
        AssertUtil.isNotEmpty(account, "请输入账号");
        AssertUtil.isNotEmpty(password, "请输入密码");
        // 构建请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        // 构建请求体
        MultiValueMap body = new LinkedMultiValueMap<>();
        body.add("username", account);
        body.add("password", password);
        body.setAll(BeanUtil.beanToMap(oAuth2ClientConfiguration));
        HttpEntity< MultiValueMap> httpEntity = new HttpEntity<>(body, headers);
        // 设置Authorization
        restTemplate.getInterceptors().add(new BasicAuthenticationInterceptor(oAuth2ClientConfiguration.getClientId(),
                oAuth2ClientConfiguration.getSecret()));
        // 发送请求
        ResponseEntity result = restTemplate.postForEntity(oAuthServerName + "/oauth/token", httpEntity, ResultInfo.class);
        // 处理返回结果
        AssertUtil.isTrue(result.getStatusCode() != HttpStatus.OK);
        ResultInfo resultInfo = result.getBody();
        if(resultInfo.getCode() != ApiConstant.SUCCESS_CODE){
            // 登录失败
            resultInfo.setData(resultInfo.getMessage());
            return resultInfo;
        }
        // 将LinkedHashMap转为域对象
        OAuthDinerInfo oAuthDinerInfo = BeanUtil.fillBeanWithMap((LinkedHashMap) resultInfo.getData(), new OAuthDinerInfo(), false);
        // 根据需求返回视图对象
        LoginDinerInfo loginDinerInfo = new LoginDinerInfo();
        loginDinerInfo.setUsername(oAuthDinerInfo.getUsername());
        loginDinerInfo.setToken(oAuthDinerInfo.getAccessToken());
        return ResultInfoUtil.buildSuccess(path, loginDinerInfo);
    }
}

你可能感兴趣的:(后端学习,java,开发语言)