<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)行測試





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



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

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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲伊人色欲综合网| 亚洲色www永久网站| 亚洲一区免费在线观看| 亚洲熟妇AV一区二区三区浪潮| 免费h成人黄漫画嘿咻破解版| 日本免费人成网ww555在线| 亚洲一级免费视频| 无码欧精品亚洲日韩一区夜夜嗨 | 免费在线视频你懂的| 色噜噜的亚洲男人的天堂| 亚洲卡一卡2卡三卡4卡无卡三| 好吊妞998视频免费观看在线| 中文字幕免费观看全部电影| 亚洲综合色区中文字幕| 亚洲一区爱区精品无码| 女人被男人躁的女爽免费视频| 中文字幕乱码免费看电影| 亚洲一区二区观看播放| 亚洲最大福利视频网站| 国产精品亚洲视频| 德国女人一级毛片免费| 四虎成人精品永久免费AV| 黄页网址在线免费观看| 亚洲av无码不卡久久| 亚洲动漫精品无码av天堂| 四虎1515hm免费国产| 1000部拍拍拍18免费网站| 中文字幕久无码免费久久| 综合偷自拍亚洲乱中文字幕| 亚洲天堂电影在线观看| 久久精品亚洲一区二区| 亚洲一区二区三区国产精品| 全免费a级毛片免费看无码| 亚洲视频在线免费看| 免费一本色道久久一区| 国产成人免费AV在线播放 | 亚洲中文字幕久久精品无码VA| 亚洲人成在线观看| 国产亚洲高清不卡在线观看| 亚洲国产精品第一区二区三区| 免费观看美女裸体网站|