oracle访问 http 接口服务(restful)

今天遇到一个需求Oracle访问 HTTP接口服务,restful风格的

--v_url  --请求地址
--v_param--POST请求参数 
--v_type--请求类型 post get
FUNCTION F_WS_CLIT(v_url  VARCHAR2,v_param  VARCHAR2,v_type  varchar2)return varchar2 is
--GET--
 req UTL_HTTP.REQ;
 resp UTL_HTTP.RESP;
 v_line VARCHAR2 ( 4000 );
 v_text VARCHAR2 ( 4000 );
 v_param_length NUMBER ;
--post--
begin
    IF V_TYPE='GET' THEN
          v_text := '';
          req := UTL_HTTP.BEGIN_REQUEST ( url => v_url, method => 'GET' );
          UTL_HTTP.SET_BODY_CHARSET('UTF-8');
          UTL_HTTP.SET_HEADER(req, 'Content-Type', 'application/x-www-form-urlencoded');
          resp := UTL_HTTP.GET_RESPONSE ( req );
          UTL_HTTP.READ_LINE ( resp, v_line, TRUE );
          v_text := v_text || v_line;
          UTL_HTTP.END_RESPONSE( resp );

    ELSE
          v_param_length  := LENGTHB(v_param);
          req := UTL_HTTP.BEGIN_REQUEST (url=> v_url, method => 'POST');

          UTL_HTTP.SET_BODY_CHARSET('UTF-8');
          UTL_HTTP.SET_HEADER (r      =>  req,
                               name   =>  'Content-Type',
                               VALUE  =>  'application/x-www-form-urlencoded');
          UTL_HTTP.SET_HEADER (r      =>   req,
                               name   =>   'Content-Length',
                               VALUE  =>   v_param_length);
          UTL_HTTP.WRITE_RAW (r    => req,
                              data => UTL_RAW.CAST_TO_RAW(v_param));
                              resp := UTL_HTTP.GET_RESPONSE(req);
          UTL_HTTP.READ_LINE(resp, v_text, TRUE);
          UTL_HTTP.END_RESPONSE(resp);
    END IF;
    return v_text;
EXCEPTION
            WHEN UTL_HTTP.END_OF_BODY THEN
            UTL_HTTP.END_RESPONSE ( resp );
            WHEN OTHERS THEN
            UTL_HTTP.END_RESPONSE(resp);
            UTL_HTTP.END_REQUEST(req);
end F_WS_CLIT;

测试报错

ORA-06512: 在 "SYS.UTL_HTTP" ...
ORA-06512: 在 "SYS.UTL_HTTP" ...
ORA-29273: HTTP 请求失败
ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝

需要开通Oracle网络控制列表权限
访问成功;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例: 1. 在 pom.xml 中添加 Spring Boot、MyBatis 和 Oracle JDBC 驱动的依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency> </dependencies> ``` 2. 配置 Oracle 数据库连接信息 在 `application.properties` 文件中添加以下配置: ``` spring.datasource.url=jdbc:oracle:thin:@localhost:1521:ORCL spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver ``` 3. 创建 MyBatis Mapper 在 `src/main/resources` 目录下创建 `mapper` 文件夹,然后创建一个 `UserMapper.xml` 文件。示例代码如下: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <select id="getUserById" parameterType="int" resultType="com.example.demo.entity.User"> SELECT * FROM users WHERE id = #{id} </select> <select id="getAllUsers" resultType="com.example.demo.entity.User"> SELECT * FROM users </select> </mapper> ``` 注意:`com.example.demo.entity.User` 是一个简单的实体类,包含 `id`、`name` 和 `email` 三个属性。 4. 创建 MyBatis DAO 在 `src/main/java` 目录下创建 `dao` 文件夹,然后创建一个 `UserDao.java` 接口。示例代码如下: ```java package com.example.demo.dao; import com.example.demo.entity.User; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository public interface UserDao { User getUserById(int id); List<User> getAllUsers(); } ``` 5. 创建 Service 和 Controller 在 `src/main/java` 目录下创建 `service` 文件夹,然后创建一个 `UserService.java` 接口和一个 `UserController.java` 控制器。示例代码如下: ```java package com.example.demo.service; import com.example.demo.entity.User; import java.util.List; public interface UserService { User getUserById(int id); List<User> getAllUsers(); } ``` ```java package com.example.demo.service.impl; import com.example.demo.dao.UserDao; import com.example.demo.entity.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public User getUserById(int id) { return userDao.getUserById(id); } @Override public List<User> getAllUsers() { return userDao.getAllUsers(); } } ``` ```java package com.example.demo.controller; import com.example.demo.entity.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users/{id}") public User getUserById(@PathVariable int id) { return userService.getUserById(id); } @GetMapping("/users") public List<User> getAllUsers() { return userService.getAllUsers(); } } ``` 6. 运行应用程序 在终端中输入以下命令: ``` mvn spring-boot:run ``` 然后在浏览器中访问以下 URL: ``` http://localhost:8080/users/1 http://localhost:8080/users ``` 就可以看到查询结果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值