zoukankan      html  css  js  c++  java
  • 对Spring 的RestTemplate进行包装

    Spring的RestTemplate及大地简化了REST Client的开发,但每次还要编写大量的模板代码,代码不够简洁。我对他进行了一次包装,采用接口来声明REST接口,使用Annotation对interface的方法进行标注。如下声明一个REST接口

    //接口必须继承BaseRestClient,提供了一个setUrl的基本方法。
    public interface ITestRest extends BaseRestClient
    {
        //声明一个REST方法,method是GET,在路径里面有个参数id,如:  http://localhost:8080/get/{id}。返回一个UserInfo对象,由Json反射过来。
        @RestClient(method = HttpMethod.GET)
        UserInfo getUser(@PathParam(value = "id") String id);
        //声明一个REST方法,method用POST,除了路径里面的id,还有一个表单
        @RestClient(method = HttpMethod.POST)
        UserInfo postUser(@PathParam(value = "id") String id,@FormBody UserForm form);
        //表单中含有文件
        @RestClient(method = HttpMethod.POST,hasFile = true)
        UserInfo postUserWithFile(@PathParam(value = "id") String id,@FormBody UserFormWithFile form); 
    }

    声明Bean

    @Bean
        public ITestRest testRest(RestTemplate restTemplate){
            ITestRest testRest= RestClientBuilder.newRestClient(ITestRest.class,restTemplate);
            return  testRest;
        }
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplateBuilder()
                    .additionalMessageConverters(new MappingJackson2HttpMessageConverter())
                    .additionalMessageConverters(new FormHttpMessageConverter()).build();
        }

    调用方

        @Autowired
        ITestRest testRest;
        ......
        testRest.setUrl("http://localhost:8080/get/{id}");
        UserInfo user=testRest.getUser("123456");

    由于访问路径可能会变化,比如采用了集群,所以在调用前需要set一下,url放到ThreadLocal里面,线程安全。 
    如果不变,可以在@RestClient声明中加上path指定访问地址 
    github地址:https://github.com/bobdeng/ssrf

  • 相关阅读:
    jmeter 数据库类型的脚本
    jmeter 协议到脚本编写
    python socket粘包
    微信公众号开发
    常用windows和office激活工具
    分辨率等概念
    设置单元格同高或同宽
    单元格内容前或后增加内容
    单元格内数字复制和递增
    excel单元格内容换行
  • 原文地址:https://www.cnblogs.com/hyl8218/p/8889795.html
Copyright © 2011-2022 走看看