05-微服务相互调用-RestTemplate

RestTemplate

很LOW,作为了解

RestTemplate 有Spring框架提供的一个用于 后端服务器模拟发送HTTP请求的一种技术

它支持所有的HTTP标准方法,包含:GET,POST,PUT,DELETE

调用第3方接口

见:《01-Spring项目调用外部服务器》

调用子系统的接口
1、在基础微服务中,暴露一些接口

在marketmag/controller中

/**
 * 市场管理表现层
 * 对于前端/微服务来讲,这就是暴露出来的接口
 */
@RestController
@RequestMapping("/market")
public class MarketController {
    /**
     * 新增接口
     * @param marketInfo
     * @return
     */
    @PostMapping(value = "/more",produces = MediaType.APPLICATION_JSON_VALUE)
    public String saveMarket(MarketInfo marketInfo){
        System.out.println(marketInfo);

        return JSONObject.toJSONString(ResponseMsg.builder().code(200).msg("操作成功").build());
    }

    /**
     * 修改接口
     * @param marketInfo
     * @return
     */
    @PutMapping(value = "/{id}",produces = MediaType.APPLICATION_JSON_VALUE)
    public String updateMarket(MarketInfo marketInfo,@PathVariable("id") Integer id){
        System.out.println(marketInfo);
        System.out.println(id);

        return JSONObject.toJSONString(ResponseMsg.builder().code(200).msg("操作成功").build());
    }

    /**
     * 删除
     * @param id
     * @return
     */
    @DeleteMapping(value = "/{id}",produces = MediaType.APPLICATION_JSON_VALUE)
    public String deleteMarket(@PathVariable("id") Integer id){
        System.out.println(id);

        return JSONObject.toJSONString(ResponseMsg.builder().code(200).msg("操作成功").build());
    }

    /**
     * 查询
     * @param marketInfo
     * @return
     */
    @GetMapping(value = "/all",produces = MediaType.APPLICATION_JSON_VALUE)
    public String findAllByParams(MarketInfo marketInfo){
        List<MarketInfo> datas = new ArrayList<>();
        MarketInfo m1 = new MarketInfo();
        m1.setMarketName("市场1");
        MarketInfo m2 = new MarketInfo();
        m2.setMarketName("市场2");
        datas.add(m1);
        datas.add(m2);

        return JSONObject.toJSONString(ResponseMsg.builder().code(200).msg("操作成功").data(datas).build());
    }
}
2、在用户微服务中,调用上述接口
配置RestTemplate实例
@Configuration
public class SpringMvcConfiguration implements WebMvcConfigurer {
    /**
     * 产生一个RestTemplate 模板对象
     * @return
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}    
GET调用
@RequestMapping("/rest")
@RestController
public class RestTemplateController {

    @Resource
    private RestTemplate restTemplate;

    /**
     * GET调用
     * @return
     */
    @GetMapping(value = "/get",produces = MediaType.APPLICATION_JSON_VALUE)
    public String test01(){
        String res = restTemplate.getForObject(getUrl()+"market/all",String.class);
        System.out.println(res);
        return res;
    }

    public String getUrl(){
        return "http://127.0.0.1:9091/";
    }

}

POST调用
    /**
     * Post调用
     * @return
     */
    @PostMapping(value = "/post", produces = MediaType.APPLICATION_JSON_VALUE)
    public String test02(){
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
        map.add("id", "1");
        map.add("marketName", "市场1");
        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(map, headers);

        ResponseEntity<String> res = restTemplate.postForEntity(getUrl()+"market/more",httpEntity,String.class);
        System.out.println(res.getBody());
        return res.getBody();
    }
Put调用
    /**
     * PUT调用
     * @return
     */
    @PutMapping(value = "/put", produces = MediaType.APPLICATION_JSON_VALUE)
    public String test03(){


        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
        map.add("id", "12");
        map.add("marketName", "市场1");
        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(map, headers);

        restTemplate.put(getUrl()+"market/{1}",httpEntity,12);
        return JSONObject.toJSONString(ResponseMsg.builder().code(200).msg("操作成功!").build());
    }
DELETE调用
    /**
     * DELETE调用
     * @return
     */
    @DeleteMapping(value = "/delete", produces = MediaType.APPLICATION_JSON_VALUE)
    public String test04(){

        //{1} 代表的是路径参数的占位符
        restTemplate.delete(getUrl()+"market/{1}",12);
        return JSONObject.toJSONString(ResponseMsg.builder().code(200).msg("操作成功!").build());
    }

**注意:**RestTemplate 一定要有详细的路径 http://127.0.0.1:9091/market/more

它没有提供任何的负载均衡的说法,也不能自动切换请求地址,如果请求地址出现问题,我们微服务调用就直接失败

解决方案:

请学习下一个更换技术,Ribbon

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值