<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    用jython實(shí)現(xiàn)java調(diào)用python

    1. 在Eclipse中創(chuàng)建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-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 test2(@RequestBody Request request) {
              Response response = callPythonFunc("testAPI", request);
              return response;
          }
      }

    5. 運(yùn)行springboot應(yīng)用程序,console信息如下
       /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
      ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
       \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
        '  |____| .__|_| |_|_| |_\__, | / / / /
       =========|_|==============|___/=/_/_/_/
       :: Spring Boot ::                (v3.0.5)
      2023-05-20T23:07:51.546+09:00  INFO 17548 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 17.0.6 with PID 17548 (D:\pleiades\workspace\demo\target\classes started by lzqdi in D:\pleiades\workspace\demo)
      2023-05-20T23:07:51.550+09:00  INFO 17548 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
      2023-05-20T23:07:52.760+09:00  INFO 17548 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
      2023-05-20T23:07:52.777+09:00  INFO 17548 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
      2023-05-20T23:07:52.778+09:00  INFO 17548 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.7]
      2023-05-20T23:07:52.904+09:00  INFO 17548 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
      2023-05-20T23:07:52.908+09:00  INFO 17548 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1286 ms
      2023-05-20T23:07:55.673+09:00  INFO 17548 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
      2023-05-20T23:07:55.832+09:00  INFO 17548 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
      2023-05-20T23:07:55.846+09:00  INFO 17548 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 4.604 seconds (process running for 5.36)
      2023-05-20T23:08:36.469+09:00  INFO 17548 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
      2023-05-20T23:08:36.469+09:00  INFO 17548 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
      2023-05-20T23:08:36.474+09:00  INFO 17548 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 5 ms
    6. 啟動Postman進(jìn)行測試





      ■項目文件構(gòu)成如下



    posted on 2023-05-20 22:54 我為J狂 閱讀(175) 評論(0)  編輯  收藏 所屬分類: 開源框架

    <2023年5月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精品无码av| 亚洲精品国产摄像头| 日本一区二区三区免费高清| 亚洲综合精品成人| 亚洲人午夜射精精品日韩| 一级毛片成人免费看免费不卡| 亚洲日本香蕉视频观看视频| 精品免费久久久久久成人影院| 黄色短视频免费看| 亚洲av无码国产综合专区| 亚洲国产成人a精品不卡在线| 久久aa毛片免费播放嗯啊| 亚洲精品av无码喷奶水糖心| 亚洲中文字幕久久精品无码喷水| 最近中文字幕免费完整| 男人j进女人p免费视频| 亚洲国产美女福利直播秀一区二区| 国产在线观看免费完整版中文版| 国产精品白浆在线观看免费| 日韩国产精品亚洲а∨天堂免| 亚洲第一精品福利| 亚洲精品乱码久久久久久不卡| 亚洲免费观看在线视频| 中文在线观看国语高清免费| 亚洲 欧洲 日韩 综合在线| 久久夜色精品国产亚洲AV动态图 | 国产成人精品日本亚洲专区| 四虎成年永久免费网站| 精品国产污污免费网站入口在线| 亚洲综合无码无在线观看| 亚洲色图在线播放| 亚洲日韩人妻第一页| 免费羞羞视频网站| 亚洲精品视频在线观看免费| 巨胸喷奶水视频www免费视频| jizzjizz亚洲日本少妇| 亚洲精品国产日韩| 亚洲视频网站在线观看| 精品国产_亚洲人成在线高清 | 亚洲日韩精品无码专区网址| 日本高清免费aaaaa大片视频|