这几天一直在学习restful web services,感觉很棒,相对于之前的SOAP方式,它不仅大大缩短了我们程序员的学习周期,而且使用简单,功能强大,于是萌生了用它来实现IP查询的web services服务,可供有需要的朋友直接通过js方式进行调用的想法。因为之前曾经有朋友提到,他的客户要求实现通过来访者的IP定位地图然后查询附近的店铺,他精通页面制作,对js也比较熟悉,但却对java、dot net等不熟悉,也不想花太多的时间去学习,所以问我能不能提供js方法给他,现在终于找到解决的方法了。
通过jersey的API得知其pojo类的方法返回的值有很多种类型,其中就包括xml和json,而这两种类型,很多js的框架都有很好的支持,有直接的方法对返回的xml,json格式的字符串进行格式化成相应的对象,在此我选择了json格式,下面说说实现的过程。
首先,需要在方法增加这样的注解,@Produces(MediaType.APPLICATION_JSON),方法体里实现通过IP地址获取对应的信息,如国家、省份、经度、纬度等,方法返回的则是JSONObject对象,代码片段如下:
@GET
@Produces(MediaType.APPLICATION_JSON)
public JSONObject getIpInfoByIpOrHost(@Context HttpServletRequest request){
JSONObject myObject = new JSONObject();
myObject.put("countryCode","");
......
}
然后在页面利用js框架jquery.js和json2.js进行调用
jQuery.ajax({
type: "GET",
url: '<%=path%>/services/ip',
data: "ip="+ip+"&userId="+userId,
success: function(data) {
var myObject = JSON.parse(data);
}
});
由于我的服务已经发布到互联网,所以如果其他朋友需要在自己的网站进行调用的话,可以直接把上面的url改成我服务的链接即就可,服务的链接为:http://www.jackshow.net/,方法调用参数有二个,一个是待查询的IP,一个是userId(有需要调用的朋友可以联系我,我分配一个用户帐户即可调用)。返回结果包括:
国家代号(英):countryCode
国家名称(英):countryName
省份(英): province
城市(英):city
时区(英):timeZone
经度:jingdu
纬度:weidu
省份城市(纯真):chunZhenCountry
位置(纯真):chunZhenLocation