统一CONTROLLER路由(20200710)

引入依赖

<dependency>
    <groupId>
org.apache.httpcomponents</groupId>
    <artifactId>
httpasyncclient</artifactId>
</dependency>

 

 

BaseController对PUT POST GET封装

package com.fullsee.integrated.middleware.controller;

import
com.fullsee.integrated.middleware.configuration.ServerConfig;
import
com.fullsee.integrated.middleware.utils.SpringContextUtil;
import
org.apache.http.*;
import
org.apache.http.client.methods.HttpGet;
import
org.apache.http.client.methods.HttpPost;
import
org.apache.http.client.methods.HttpPut;
import
org.apache.http.entity.InputStreamEntity;
import
org.apache.http.impl.client.CloseableHttpClient;
import
org.apache.http.impl.client.HttpClients;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;

import
javax.servlet.http.HttpServletRequest;
import
java.io.*;
import
java.util.*;

/**
 *
<li>文件名称: 题目名称</li>
 
* <li>文件描述: 题目名称 功能描述</li>
 
* <li>版权所有: 版权所有© 2005-2019</li>
 
* <li> : Fullsee</li>
 
* <li>内容摘要: </li>
 
* <li>其他说明:</li>
 
* <li>完成日期: 2020-07-07 13:56 </li>
 
* <li>修改记录: </li>
 
*
 * @author songyunbing
 * @version
产品版本
 */
public class BaseController {

   
protected Logger log = LoggerFactory.getLogger(getClass());

   
/**
     * @param request
     * @return
    
*/
   
public String handlePut(String baseUrl,HttpServletRequest request) {
        Map<String
, String[]> params = request.getParameterMap();
       
String url = params.get("url")[0];
       
HttpPut httpPut = new HttpPut(baseUrl + url);
       
CloseableHttpClient httpclient = HttpClients.createDefault();
       
String responseStr = null;
       
InputStreamEntity entity;
        try
{
           
//POSTPUT请求Body参数在InputStream
           
InputStream inputStream = request.getInputStream();
           
entity = new InputStreamEntity(inputStream);
           
httpPut.setEntity(entity);
           
HttpResponse response = httpclient.execute(httpPut);
           
responseStr = getResponseContent(response);
       
}catch (IOException e) {
            e.printStackTrace()
;
       
}
        log.debug(
"请求转发完成,返回结果={}", responseStr);
        return
responseStr;
   
}

   
/**
     * @param request
     * @return
    
*/
   
public String handlePost(String baseUrl,HttpServletRequest request) {
        Map<String
, String[]> params = request.getParameterMap();
       
String url = params.get("url")[0];
       
HttpPost httpPost = new HttpPost(baseUrl + url);
       
CloseableHttpClient httpclient = HttpClients.createDefault();
       
String responseStr = null;
       
InputStreamEntity entity;
        try
{
           
//POSTPUT请求Body参数在InputStream
           
InputStream inputStream = request.getInputStream();
           
entity = new InputStreamEntity(inputStream);
           
httpPost.setEntity(entity);
           
HttpResponse response = httpclient.execute(httpPost);
           
responseStr = getResponseContent(response);
       
}catch (IOException e) {
            e.printStackTrace()
;
       
}
        log.debug(
"请求转发完成,返回结果={}", responseStr);
        return
responseStr;
   
}

   
/**
     * @param request
参数
     * @return
    
*/
   
public String handleGet(String baseUrl,HttpServletRequest request) {
        Map<String
, String[]> params = request.getParameterMap();
       
String url = params.get("url")[0];
       
String paramstr = getParamStr(params);
       
log.debug("参数拼接结果={}", paramstr);
       
HttpGet httpGet = new HttpGet(baseUrl + url + paramstr);
       
CloseableHttpClient httpclient = HttpClients.createDefault();
       
String responseStr = null;
        try
{
            HttpResponse response = httpclient.execute(httpGet)
;
           
responseStr = getResponseContent(response);
       
} catch (IOException e) {
            log.error(e.toString())
;
       
}
       
return responseStr;
   
}

   
/**
     *
拼接Get请求参数串
     *
     * @param params
     * @return
    
*/
   
private String getParamStr(Map<String, String[]> params) {
        StringJoiner sj =
new StringJoiner("&", "?", "");
        if
(params != null && !params.isEmpty()) {
            Iterator<Map.Entry<String
, String[]>> iter = params.entrySet().iterator();
           
Map.Entry<String, String[]> entry = null;
            while
(iter.hasNext()) {
                entry = iter.next()
;
               
String key = entry.getKey();
                if
(key.equals("method") || key.equals("url")) {
                   
continue;
               
}
                String[] values = entry.getValue()
;
                if
(values != null) {
                   
if (values.length == 1) {
                        sj.add(key +
"=" + values[0]);
                   
} else {
                        Arrays.stream(values).forEach(x -> sj.add(key +
"=" + x));
                   
}
                }
            }
        }
       
return sj.toString();
   
}

   
/**
     *
解析Response响应结果
     *
     * @param response
     * @return
    
* @throws IOException
     */
   
private String getResponseContent(HttpResponse response) {
        StringBuffer resultBuffer =
new StringBuffer();
       
BufferedReader br = null;
       
String line;
        try
{
            br =
new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            while
((line = br.readLine()) != null) {
                resultBuffer.append(line)
;
           
}
        }
catch (IOException e) {
            e.printStackTrace()
;
       
} finally {
           
if (br != null) {
               
try {
                    br.close()
;
               
} catch (IOException e) {
                    log.error(e.toString())
;
               
}
            }
        }
       
return resultBuffer.toString();
   
}
}

 

 

ApiAcontroller统一请求入口

package com.fullsee.integrated.middleware.controller;

import
com.alibaba.fastjson.JSON;
import
com.fullsee.integrated.middleware.configuration.ServerConfig;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.web.bind.annotation.*;

import
javax.servlet.http.HttpServletRequest;
import
java.util.*;

/**
 *
<li>文件名称: 题目名称</li>
 
* <li>文件描述: 题目名称 功能描述</li>
 
* <li>版权所有: 版权所有© 2005-2019</li>
 
* <li> : Fullsee</li>
 
* <li>内容摘要: </li>
 
* <li>其他说明:</li>
 
* <li>完成日期: 2020-07-07 13:55 </li>
 
* <li>修改记录: </li>
 
*
 * @author songyunbing
 * @version
产品版本
 */
@RestController
@RequestMapping(
"/api")
public class ApiController extends BaseController{

    @Autowired
   
private ServerConfig serverConfig;

   
/**
     *
统一路由api,在原先的基础上加上2个参数,一个url,一个method,其他参数传递方式和原来一样即可
     * 如:GET请求或者POST请求均可以:(适用于实际服务方式为GET请求)
     * http://localhost:8011/api?url=test/testGet&name=zhangsan&name=wangwu&passsowrd=123&method=GET
     * /api
表示统一路由入口
     * url=test/testGet表示实际访问服务地址,url前面不带/
     * method=GET
表示实际访问服务地址的方式,取值为POST,GET,PUT
     * &name=zhangsan&name=wangwu&passsowrd=123
表示实际访问服务需要的参数
     * &name=zhangsan&name=wangwu表示支持传数组方式,接收结果会根据name接收到一个数组[zhangsan,wangwu]
     *
     * POST
请求(适用于实际服务方式为POSTPUT请求)
     * http://localhost:8011/api?url=test/testPost&method=POST
     *
传参如下:
     * {
     *     "name":"zhangsan",
     *     "age":20
     * }
     * /api
表示统一路由入口
     * url=test/testGet表示实际访问服务地址,url前面不带/
     * method=GET
表示实际访问服务地址的方式,取值为POST,GET,PUT
     * {"name":"zhangsan","age":20}
表示实际访问服务需要的参数
     * 注意POST方式参数传递分2部分,urlmethod和参数json参数体
     * @param request
     * @return
    
*/
   
@PostMapping(produces = "application/json;charset=UTF-8")
   
public Map<String, Object> doPost(HttpServletRequest request) {
        StringJoiner sj =
new StringJoiner(":", "http://", "/");
       
sj.add("127.0.0.1");
       
sj.add(Optional.ofNullable(serverConfig.getPort()).map(x->x.toString()).orElse("8011"));
       
String baseUrl = sj.toString();
       
Map<String,String[]> params = request.getParameterMap();
       
Map<String,Object> resultMap;
        if
(params.get("url") != null && params.get("method") != null) {
            String method = params.get(
"method")[0];
           
String str = null;
            if
(method.equalsIgnoreCase(RequestMethod.POST.toString())) {
                str = handlePost(baseUrl
,request);
           
}else if(method.equalsIgnoreCase(RequestMethod.GET.toString())){
                str = handleGet(baseUrl
,request);
           
}else if(method.equalsIgnoreCase(RequestMethod.PUT.toString())) {
                str = handlePut(baseUrl
,request);
           
}
            resultMap = JSON.parseObject(str
,Map.class);
       
}else{
            resultMap =
new HashMap<>();
           
resultMap.put("code",1);
           
resultMap.put("msg","urlmethod参数缺失");
       
}
       
return resultMap;
   
}
    @GetMapping(produces =
"application/json;charset=UTF-8")
   
public  Map<String, Object> doGet(HttpServletRequest request) {
       
return doPost(request);
   
}

}

 

 

ApiController统一路由后转发的测试Controller

package com.fullsee.integrated.middleware.controller;

import
com.alibaba.fastjson.JSON;
import
com.starmo.platform.core.processor.Processor;
import
com.starmo.platform.core.processor.web.WebSystemProcessor;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.web.bind.annotation.*;

import
javax.servlet.http.HttpServletRequest;
import
java.util.HashMap;
import
java.util.Map;

/**
 *
<li>文件名称: 题目名称</li>
 
* <li>文件描述: 题目名称 功能描述</li>
 
* <li>版权所有: 版权所有© 2005-2019</li>
 
* <li> : Fullsee</li>
 
* <li>内容摘要: </li>
 
* <li>其他说明:</li>
 
* <li>完成日期: 2020-07-07 15:58 </li>
 
* <li>修改记录: </li>
 
*
 * @author songyunbing
 * @version
产品版本
 */
@RestController
@RequestMapping(
"/test")
public class TestController {

    @Autowired
   
private Processor processor;

   
@GetMapping(value = "/testGet",produces = "application/json;charset=UTF-8")
   
public Map<String, Object> testGet(HttpServletRequest request) {
        Map<String
,String[]> params = request.getParameterMap();
       
System.out.println("===========testGet==================");
       
System.out.println(JSON.toJSONString(params));
       
System.out.println("============testGet=================");
       
Map<String,Object> resultMap = new HashMap<>();
       
resultMap.put("code",0);
       
resultMap.put("data","test get return data");
        return
resultMap;
   
}

    @PostMapping(value =
"testPost",produces = "application/json;charset=UTF-8")
   
public Map<String, Object> testPost(HttpServletRequest request) {
        Map<String
, Object> params = processor.start().routeTo(WebSystemProcessor.class).acceptParameterApplicationJson(request).end().preValue(Map.class);
       
System.out.println("===========testPost==================");
       
System.out.println(JSON.toJSONString(params));
       
System.out.println("============testPost=================");
       
Map<String,Object> resultMap = new HashMap<>();
       
resultMap.put("code",0);
       
resultMap.put("data","test post return data");
        return
resultMap;
   
}

    @PutMapping(value =
"testPut",produces = "application/json;charset=UTF-8")
   
public Map<String, Object> testPut(HttpServletRequest request) {
        Map<String
, Object> params = processor.start().routeTo(WebSystemProcessor.class).acceptParameterApplicationJson(request).end().preValue(Map.class);
       
System.out.println("===========testPut==================");
       
System.out.println(JSON.toJSONString(params));
       
System.out.println("============testPut=================");
       
Map<String,Object> resultMap = new HashMap<>();
       
resultMap.put("code",0);
       
resultMap.put("data","test put return data");
        return
resultMap;
   
}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值