在我们实际开发中,会碰到调用多个接口,而传参大致相同的情况,为了减少代码量并且后期方便维护,我们可以使用注解RequestMapping("/{}")来解决,通过传入不同关键字来选择不同接口地址;
1、首先,我们在需要调用的万能接口上写上
@RequestMapping("/{type}")
@ResponseBody
,因为我们需要根据不同的type来区分不同的地址,故我们需要将type作为参数往下传递,并且用@PathVariable(“type”) String type进行注解;
2、我们根据传入不同的type使用switch动态拼接/选择我们的url地址,
3、后面的操作就是类似的执行该url(注:该方式仅在url调用方式相同时才能使用)
最后附上调用的完整代码,以及post方式调用http方法,并且在头部给其赋值并且得到返回值的实例
@RequestMapping("/{type}")
@ResponseBody
public String TypeList(String loginToken, String id, @PathVariable("type") String type, ServletResponse response) {
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
String url1 = "";
switch (type) {
case "getAnswerList":
url1 = url + "loadanswer.action?page=1&limit=10";// 获取到问题列表
break;
case "getTitleList":
url1 = url + "loadsubject.action?answerid=" + id; // 获取到问题具体
break;
case "getServiceStation":
url1 = url + "loadservicestation.action?page=1&limit=10"; // 获取到消防服务站详情
break;
case "getContent":
url1 = url + "loadcontent.action?page=1&limit=10";// 获取到消防资讯
break;
case "getContentDetail":
url1 = url + "loadcontentdetail.action?id=" + id;// 获取到消防资讯详细
break;
case "product":
url1 = url + "loadproduct.action?page=1&limit=10";// 获取到积分商品列表
break;
case "productDetail":
url1 = url + "loadproductdetail.action?productid=" + id;// 获取到积分商品详情
break;
case "exchange":
url1 = url + "exchangeproduct.action?productid=" + id; // 兑换商品
break;
}
// java通过http协议访问资源
HttpClient client = new HttpClient();
// 设置添加的参数为utf-8编码格式
client.getParams().setContentCharset("utf-8");
// 创建一个post方法
GetMethod method = new GetMethod(url1);
// 给方法添加一个头部参数
method.addRequestHeader("token", loginToken);
String strResult = "";
try {
// http对象执行方法
client.executeMethod(method);
// 方法获取回应值
strResult = method.getResponseBodyAsString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return strResult;
}