HttpURLConnection调用远程接口

本文介绍了一种从HTTP请求中读取响应并转换为字符串的方法。通过使用InputStreamReader和BufferedReader,逐行读取输入流并将内容拼接成字符串。示例展示了如何向“www.baidu.com”发送GET请求,获取输入流并将其转换为字符串。
public static String ResultToString(InputStream inputStream){  
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);  
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
        StringBuilder result = new StringBuilder();  
        String line = null;  
        try {  
            while((line = bufferedReader.readLine()) != null){  
                result.append(line + "\n");  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try{  
                inputStreamReader.close();  
                inputStream.close();  
                bufferedReader.close();  
            }catch(IOException e){  
                e.printStackTrace();  
            }  
        }  
        return result.toString();  
    } 
	
	public static void main(String[] args) throws IOException {
		URL url = new URL("http:www.baidu.com") ;
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection() ;
        urlConnection.setRequestMethod("GET") ;
        urlConnection.connect() ;
        InputStream inputStream = urlConnection.getInputStream() ;
        String result = ConvertToString(inputStream) ;
        System.out.println(result);
	}

 

<think>我们有一个存储过程,它执行了SOAP请求。现在需要将这个存储过程的功能转换为Java代码,并实现远程调用RESTful接口(而不是SOAP)。 根据引用[1]和[2],我们知道在系统中可以通过不同的方式查看SOAP和REST接口。但用户现在要求将原本使用SOAP的存储过程逻辑改为使用RESTful接口的Java实现。 步骤: 1. 理解存储过程的功能:存储过程`proc_CheckOutTime`(根据名称可能是检查超时)中执行了SOAP请求。 2. 我们需要将SOAP请求转换为RESTful请求。但注意,RESTful接口通常使用HTTP方法(GET, POST等)和JSON/XML格式,而SOAP使用XML格式并通过SOAP协议传输。 3. 在Java中调用RESTful接口,我们可以使用多种方式,例如:HttpURLConnection, Apache HttpClient, Spring的RestTemplate, 或者第三方库如OkHttp。 由于用户没有提供存储过程的具体代码,我们只能假设存储过程中构建了一个SOAP请求并发送。因此,我们需要知道: - 目标RESTful接口的URL(替换原来的SOAP端点) - 请求方法(GET, POST, PUT, DELETE等) - 请求头(如Content-Type: application/json) - 请求体(如果是POST或PUT,需要提供数据,可能是JSON格式) 转换步骤: 1. 确定原存储过程中SOAP请求的地址(Endpoint)和参数。 2. 找到对应的RESTful接口(如果有的话,或者与提供RESTful接口的团队协商确定)。 3. 构建Java代码,使用HTTP客户端发送请求。 示例:假设存储过程中发送的SOAP请求类似于以下内容(虚构): <soap:Envelope> <soap:Body> <CheckOutTime> <param1>value1</param1> <param2>value2</param2> </CheckOutTime> </soap:Body> </soap:Envelope> 而对应的RESTful接口可能是:POST http://example.com/api/checkOutTime 请求体为JSON格式:{"param1":"value1", "param2":"value2"} 因此,我们需要在Java中构建一个HTTP POST请求,设置请求头为JSON,并发送JSON数据。 下面是一个使用Java的HttpURLConnection实现POST请求的示例:</think>### 将存储过程转换为Java RESTful调用实现 根据您的需求,我将把SQL Server存储过程中的SOAP请求逻辑转换为Java实现,并改用RESTful接口调用。以下是完整的解决方案: #### 1. 核心实现代码 ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; public class RestApiCaller { // RESTful接口端点(根据实际服务地址修改) private static final String REST_ENDPOINT = "http://your-api-domain.com/api/checkOutTime"; public static void callCheckOutTime(String param1, String param2) { try { // 1. 创建HTTP连接 URL url = new URL(REST_ENDPOINT); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 2. 设置请求属性 conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Accept", "application/json"); conn.setDoOutput(true); // 3. 构建JSON请求体(替换为实际参数结构) String jsonInput = String.format( "{\"param1\": \"%s\", \"param2\": \"%s\"}", param1, param2 ); // 4. 发送请求 try(OutputStream os = conn.getOutputStream()) { byte[] input = jsonInput.getBytes(StandardCharsets.UTF_8); os.write(input, 0, input.length); } // 5. 处理响应 int responseCode = conn.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { try(BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { StringBuilder response = new StringBuilder(); String responseLine; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println("API响应: " + response.toString()); } } else { System.err.println("API调用失败,状态码: " + responseCode); } } catch (Exception e) { e.printStackTrace(); } } // 测试调用 public static void main(String[] args) { callCheckOutTime("value1", "value2"); } } ``` #### 2. 关键转换说明 1. **协议转换**: - 原存储过程使用SOAP协议(XML格式),转换为RESTful(JSON格式) - 请求方式从SOAP的`POST/SOAPAction`改为标准HTTP `POST`[^1] 2. **参数处理**: ```java // 原存储过程参数 EXEC proc_CheckOutTime @Param1='value1', @Param2=123 // 转换为JSON请求体 {"param1":"value1", "param2":123} ``` 3. **错误处理增强**: - 增加HTTP状态码检查(200/400/500等) - 添加异常捕获机制(网络超时、JSON解析错误等) 4. **安全改进**: - 建议添加HTTPS支持 - 可增加认证头(如Bearer Token) ```java // 添加认证头示例 conn.setRequestProperty("Authorization", "Bearer your_token"); ``` #### 3. 部署注意事项 1. **端点配置**: - 替换`REST_ENDPOINT`为实际服务地址 - NC系统的REST接口可通过`uapws/restmanage`查看[^2] 2. **依赖管理**: - 此实现使用Java标准库(无需第三方依赖) - 如需高级功能,可改用Spring的`RestTemplate`或Apache `HttpClient` 3. **性能优化**: - 添加连接池管理 - 设置超时参数: ```java conn.setConnectTimeout(5000); // 5秒连接超时 conn.setReadTimeout(10000); // 10秒读取超时 ``` #### 4. 与存储过程对比优势 | 特性 | 存储过程SOAP调用 | Java RESTful调用 | |--------------|--------------------------|--------------------------| | **协议** | SOAP/XML | REST/JSON | | **性能** | 依赖数据库引擎 | 直接HTTP通信 | | **可维护性** | 需数据库部署 | 独立Java应用 | | **扩展性** | 有限 | 支持负载均衡、服务发现 | | **测试** | 困难 | 可使用Postman等工具测试[^1] | > **提示**:实际转换需根据存储过程的具体业务逻辑调整JSON结构和错误处理,建议使用Swagger或OpenAPI文档验证接口规范[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值