实现了在小组的spring boot项目中使用Java项目的对话功能。
原本想的是把对话的Java项目整个改成spring boot的代码,但是我对spring boot还不是很熟悉,进行起来很艰难。然后想到了把Java对话项目打个jar包,再在spring boot项目里导入这个jar包,去调用它。具体步骤如下:
1.打包:在Java对话项目的maven中以此运行Lifecircle的clean和package。
2.加入依赖:
在Java项目源码文件夹找到target,把生成的jar包复制到spring boot源码文件夹的libs文件夹下,并在pom.xml添加依赖。
<dependency>
<groupId>top.pulselink</groupId>
<artifactId>bluechatglm</artifactId>
<version>0.1.1-Beta</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/lib/bluechatglm-0.1.1-Beta-jar-with-dependencies.jar</systemPath>
</dependency>
这里的${project.basedir}是pom文件所在的目录。
3.创建服务类并调用Jar包中的类:
@Service
public class ChatService {
private ChatClient chatClient;
// 初始化 ChatClient
public ChatService() {
String apiKey = loadApiKey();
if (apiKey == null) {
throw new IllegalStateException("API key is required");
}
this.chatClient = new ChatClient(apiKey);
this.chatClient.registerShutdownHook();
}
private String loadApiKey() {
// 从文件中加载 API key 的逻辑
// 请确保 API key 文件的路径正确,并且文件存在
try (BufferedReader reader = new BufferedReader(new FileReader("chatglm_api_key.txt"))) {
return reader.readLine();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public String sendAsyncMessage(String message) {
chatClient.registerShutdownHook();
chatClient.AsyncInvoke(message);
return chatClient.getResponseMessage();
}
public String sendSyncMessage(String message) {
chatClient.SyncInvoke(message);
return chatClient.getResponseMessage();
}
public String sendSSEMessage(String message) {
chatClient.SSEInvoke(message);
return chatClient.getResponseMessage();
}
}
4.创建控制器:
创建一个Spring Boot控制器来处理HTTP请求,并通过服务类调用现有的Java代码。
@RestController
@RequestMapping("/chat")
public class ChatController {
@Autowired
private ChatService chatService;
@PostMapping("/async")
public String sendAsyncMessage(@RequestBody String message) {
return chatService.sendAsyncMessage(message);
}
@PostMapping("/sync")
public String sendSyncMessage(@RequestBody String message) {
return chatService.sendSyncMessage(message);
}
@PostMapping("/sse")
public String sendSSEMessage(@RequestBody String message) {
return chatService.sendSSEMessage(message);
}
}
5.运行Spring Boot应用:
运行Spring Boot应用后,可以通过HTTP请求与现有的Java项目进行交互。例如,可以使用curl发送请求进行对话:
其中“--data-urlencode”是为了使cmd能够正确处理中文编码,进行中文对话。