平常主要业务是写JAVA,但是最近因为工作需要。需要用JAVA去调用Python的接口,然后自己也找了很多方法,最后觉得这种方法是最简单了。(不是唯一的方法,欢迎各位大神来指导)
1、业务需要
需要接收前端传过来的一个图片,然后传给Python的一个OCR的程序,识别一下图片中的文字并保存到数据库中
2、业务实现:
其中接收前端图片,包括存数据库,这些都是一些基础的,这里就不在细说了。重点说一下,如何使用JAVA调用Python的接口并接收Python传回来的参数。
具体使用的是方法是:使用了Spring框架的RestTemplate
来调用一个Python服务的接口
1、首先要配置一下RestTemplate
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
2、具体在业务中实现如下
// 使用RestTemplate发送文件到OCR服务进行识别
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
// 构建请求体
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.Add("File", new FileSystemResource(file));
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
// OCR服务的API地址
String apiUrl = "http://ip地址:端口号/XXX/xxxx/";
// 发送请求并获取响应
ResponseEntity<RecognitionResult> responseEntity = restTemplate.postForEntity(apiUrl, requestEntity, RecognitionResult.class);
// 处理OCR服务的响应
RecognitionResult recognitionResult = responseEntity.getBody();
3、RestTemplate
简单介绍
RestTemplate
是 Spring 提供的用于访问 REST 服务的模板类,它提供了很多便利的方法来简化 REST 调用。
使用 RestTemplate
有一些优点:
1、集成性: RestTemplate
是 Spring 框架的一部分,因此在 Spring 应用中,它可以方便地与其他 Spring 组件集成,如依赖注入、事务管理等。
2、简化 HTTP 操作: RestTemplate
提供了一种简洁的方式来执行 HTTP 请求,无需手动处理低层的 HTTP 细节,如创建 URLConnection
、设置请求头、处理响应等。这使得开发者可以更专注于业务逻辑而不是底层的 HTTP 操作。
3、丰富的功能: RestTemplate
提供了多种方法来处理不同类型的 HTTP 请求,例如 GET、POST、PUT、DELETE 等,支持同步和异步的请求,还支持处理请求和响应的各种格式,包括 JSON、XML、表单等。
4、异常处理: RestTemplate
提供了异常处理机制,方便开发者处理各种可能发生的异常,如连接超时、HTTP 错误等。
5、可扩展性: RestTemplate
可以通过插入不同的 ClientHttpRequestFactory
来支持不同的 HTTP 连接库,例如 Apache HttpClient、OkHttp 等。这使得在需要替换底层 HTTP 客户端时更加灵活。
6、模板方法模式: RestTemplate
使用了模板方法设计模式,定义了执行 HTTP 操作的标准流程,但允许开发者在其中插入自定义的逻辑,以满足特定的需求。