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

  • 相关阅读:
    hdu 1548 升降梯
    hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题
    hdu 4463 有一条边必须加上 (2012杭州区域赛K题)
    poj 1679 判断MST是不是唯一的 (次小生成树)
    poj 1751 输出MST中新加入的边
    poj 2349 求MST中第S大的权值
    HDU 4389 X mod f(x) (数位DP)
    HDU 5908 Abelian Period (暴力)
    HDU 5907 Find Q (水题)
    HDU 4514 湫湫系列故事――设计风景线 (树形DP)
  • 原文地址:https://www.cnblogs.com/hyl8218/p/8889795.html
Copyright © 2011-2022 走看看