<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)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲欧美日韩综合俺去了| 日本道免费精品一区二区| a一级爱做片免费| 91免费国产精品| 亚洲精品V欧洲精品V日韩精品| 亚洲国产精品综合久久网各 | 香蕉视频免费在线播放| 亚洲成人免费在线| 亚洲第一成年男人的天堂| 精品在线免费观看| 国产jizzjizz免费看jizz| 国产亚洲欧美在线观看| 亚洲国产精品成人AV无码久久综合影院| 亚洲精品高清视频| 51精品视频免费国产专区| 亚洲一区日韩高清中文字幕亚洲| 免费很黄无遮挡的视频毛片| 黄页网站在线观看免费高清| 久久伊人亚洲AV无码网站| AAA日本高清在线播放免费观看| 青青草国产免费久久久下载| 亚洲第一网站免费视频| 成年女人免费碰碰视频| 亚洲视频免费在线观看| 免费无码av片在线观看| 亚洲精品中文字幕乱码影院| 最新免费jlzzjlzz在线播放| 亚洲国产高清在线精品一区| 成人黄软件网18免费下载成人黄18免费视频 | 亚洲AV无码乱码在线观看富二代| 免费在线观影网站| 亚洲精品成人在线| 亚洲中文字幕久久久一区| 国产成人免费网站在线观看| 自拍偷区亚洲国内自拍| 亚洲日韩国产成网在线观看| 苍井空亚洲精品AA片在线播放| 中文字幕久久亚洲一区| 成人免费观看男女羞羞视频| 久久精品国产亚洲av四虎| 久久久精品免费国产四虎|