首页 > 编程语言 >java调用python并且实现RESTAPI

java调用python并且实现RESTAPI

时间:2023-05-19 22:35:05浏览次数:40  
标签:java String python RESTAPI apiId boot springframework import org

  1. 在Eclipse中创建springboot工程(maven)
  2. 配置pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>3.0.5</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>17</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-json</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.python</groupId>
                <artifactId>jython-slim</artifactId>
                <version>2.7.3</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

     

  3. 编写python代码  /src/main/resources/case.py
    class RequestObj:
        def __init__(self,requestId):
            self.requestid=requestId
            
    class ResponseObj:
        def __init__(self,apiId):
            self.apiId=apiId
            
    def testAPI(requestObj):
        if requestObj.requestId == "1" :
            responseObj=ResponseObj("/test/1")
        elif requestObj.requestId == "2" :
            responseObj=ResponseObj("/test/2")
        else:
            responseObj=ResponseObj("/test")
        return responseObj

     

  4. 编写java代码 /src/main/java/com/example/demo/json/Request.java
    package com.example.demo.json;
    
    public class Request {
        private String requsetId;
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getRequsetId() {
            return requsetId;
        }
    
        public void setRequsetId(String requsetId) {
            this.requsetId = requsetId;
        }
    
    }

    /src/main/java/com/example/demo/json/Response.java

    package com.example.demo.json;
    
    public class Response {
        private String apiId;
    
        public String getApiId() {
            return apiId;
        }
    
        public void setApiId(String apiId) {
            this.apiId = apiId;
        }
        
    }

    /src/main/java/com/example/demo/RestAPIController.java

    package com.example.demo;
    
    import java.io.IOException;
    
    import org.python.core.PyFunction;
    import org.python.core.PyObject;
    import org.python.core.PyString;
    import org.python.util.PythonInterpreter;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.demo.json.Request;
    import com.example.demo.json.Response;
    
    @RestController
    public class RestAPIController {
        private static PythonInterpreter interpreter;
        private static Resource resource = new ClassPathResource("case.py");
        private static String path;
        static {
            interpreter = new PythonInterpreter();
            try {
                path = resource.getFile().getPath();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        private Response callPythonFunc(String funcName, Request request) {
            interpreter.execfile(path);
            PyObject requestObj = interpreter.get("RequestObj", PyObject.class);
            requestObj.__setattr__("requestId", new PyString(request.getRequsetId()));
            PyFunction function = interpreter.get(funcName, PyFunction.class);
            PyObject responseObj = function.__call__(requestObj);
            String apiId = responseObj.__getattr__("apiId").toString();
            Response response = new Response();
            response.setApiId(apiId);
            return response;
        }
    
    
        
        @GetMapping("/test/get")
        public String test1() {
            Request request = new Request();
            request.setRequsetId("1");
            Response response = callPythonFunc("testAPI", request);
            return response.getApiId();
        }
    
        @PostMapping("/test/post")
        public Response test3(@RequestBody Request request) {
            Response response = callPythonFunc("testAPI", request);
            return response;
        }
    }

     

  5. 编写json
    {
        "requsetId":1,
        "name":"myname"
    }

     

  6. 启动postman 测试RESTAPI ,URL⇒http://localhost:8080/test/post  BODY⇒上面的json  点击”send”
  7. response如下
    {
        "apiId": "/test/1"
    }
    

      

http://localhost:8080/test/post

标签:java,String,python,RESTAPI,apiId,boot,springframework,import,org
From: https://www.cnblogs.com/lzqdiy/p/17416444.html

相关文章

  • python内置库--fileinput
    1关于fileinput利用fileinput,我们可以循环遍历标准输入或者多个文件中的数据它和open()作用很类似,但是open()只能操作一个文件且相关函数功能没有它丰富2函数介绍fileinput.input(files=None,inplace=False,backup='',*,mode='r',openhook=None,encoding=None,error......
  • Python自动化
    3-20数据类型转换数据类型转换:   1.int(x):x代指对象,返回值是一个整数类型,对象->整数       x为字符串:字符串应全为整数       x为小数:只保留整数部分       x不能是负数       x为布尔类型:True=1False=0   2.float(x):x......
  • Python自动化运维
    2-27在命令行窗口中启动的Python解释器中实现在Python自带的IDLE中实现print("Helloworld")编码规范每个import语句只导入一个模块,尽量避免一次导入多个模块不要在行尾添加分号“:”,也不要用分号将两条命令放在同一行建议每行不超过80个字符使用必要的空行可以增加代码的可读性运......
  • Python学习
    3-13字符串类型字符串类型:str   1.定义格式:       变量='内容'           打印一行       变量="内容"           打印一行       变量='''内容'''或者三引号           可以通过回车的方式换行,且打印出......
  • java基于springboot+vue的漫画网站管理系统,附源码+数据库+lw文档+PPT,适合毕业设计、课
    1、项目介绍考虑到实际生活中在漫画网站方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、漫画分类管理、漫画投稿管理、分类管理、排行榜管理、交流论坛、系统管理等功能......
  • Java编程进阶:掌握这五个高级特性让编码更得心应手
    当今,在软件开发中最流行和使用最广泛的语言之一是Java。Java不仅是一种面向对象的编程语言,还可以用于Web开发、移动应用程序编程、云计算和大数据处理。如果你是一个初学者,或者是想要进一步了解Java编程的高级特性,那么这篇文章会帮助你更好地了解Java编程。一、使用lambda表达式在J......
  • python day07 字符串和列表的数据内置方法
    字符串的内置方法(较多,重要)lower(字符串全部转为小写)upper(字符串全部转为大写)#应用:验证码不区分大小写old_code='KeVin'print('这是返回给用户的验证码%s'%old_code)new_code=input('请输入你的验证码:').strip()print(new_code)ifnew_code.lower()==old_code.lowe......
  • 【python】【报错:pip中第三库下载成功,但是pycharm却没有显示】一步解决
     解决方案: 直接在这个目录下安装第三方库 ......
  • python基础07
    字符串的内置方法(较多,重要)lower&upperold_code='KeViN'print('验证码:%s'%old_code)s=input('请输入验证码:>>>').strip()ifold_code.lower()==s.lower():#lower改为全小写print('验证成功')elifold_code.upper()==s.up......
  • JavaScript全解析——ES6函数中参数的默认值和解构赋值
    本文为千锋资深前端教学老师带来的【JavaScript全解析】系列,文章内含丰富的代码案例及配图,从0到1讲解JavaScript相关知识点,致力于教会每一个人学会JS!文末有本文重点总结,可以收藏慢慢看~更多技术类内容,主页关注一波!ES6函数中参数的默认值给函数的形参设置一个默认值,当你没有......