springboot中用RestTemplate调用百度ip定位服务

来源:互联网 发布:图论与网络优化 pdf 编辑:程序博客网 时间:2024/06/13 07:17

        项目中做一个地区定位功能,选用的是百度ip定位服务: http://lbsyun.baidu.com/index.php?title=webapi/ip-api

        关于百度ip定位服务的介绍以及用法可以在这个链接中找到,主要做的就是开通应用服务以及拿到AK。

        我开通的是服务端的应用服务,所以我是通过java代码向百度定位服务发起调用。

        java中发起http协议的请求方式有很多种,像jdk自带的URLConnection,以及Apache Jakarta Common中的HttpClient。我以前多是采用HttpClient方式。

        偶然中发现了spring-web包中的一个叫做RestTemplate的类,算是spring对客户端请求调用的一种封装实现,默认采用URLConnection方式,当然,你也可以采用HtppClient作为它的实现方式。在这里不做对它的过多介绍,有兴趣可以看下它的源码。

        代码实现:

        百度ip定位返回值:

针对返回值,我们封装一个实体用于接收。

public class Jsonr {private String address;private JsonContent content;private int status;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public JsonContent getContent() {return content;}public void setContent(JsonContent content) {this.content = content;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}}

将restTemplate注册成bean ,方便我们注入使用

@Configurationpublic class RestTemplateConfig {@Beanpublic RestTemplate getRestTemplate(ClientHttpRequestFactory factory){return new RestTemplate(factory);}@Beanpublic ClientHttpRequestFactory getSimpleClientHttpRequestFactory(){SimpleClientHttpRequestFactory fac = new SimpleClientHttpRequestFactory();    fac.setReadTimeout(3000);     fac.setConnectTimeout(10000);    return fac;}}
注入调用,并编写相关业务方法。
 @Resourceprivate RestTemplate restTemplate;public String getMemberAddress(String ip){if(StringUtils.isEmpty(ip)){return "北京市";}Jsonr r = restTemplate.getForObject(Const.BDIPURL+"?ip="+ip+"&ak="+Const.BDAK, Jsonr.class);if(r!=null){switch (r.getStatus()) {case 0:return r.getContent().getAddress_detail().getCity();case 2:    System.out.println("参数不合法");    return "北京市";case 210:    System.out.println("APP IP校验失败 ");    return "北京市";case 200:    System.out.println("APP不存在,AK有误请检查再重试 ");    return "北京市";case 101:    System.out.println("AK参数不存在 ");    return "北京市";case 260:    System.out.println("服务不存在");    return "北京市";case 261:    System.out.println("服务被禁用 ");    return "北京市";    default:return "北京市";  }}return "北京市";}


       

阅读全文
1 0
原创粉丝点击