发送octet-stream格式的请求返回乱码处理

简介: octet-stream格式的请求返回乱码处理

问题:发送octet-stream格式Content-Type=application/octet-stream的请求,导致返回的消息中,中文也被编码成了octet-stream,无法直接解析,总是乱码

解决方案:给resttemplate的stringhttpmessageconverter设置charset

这里是设置charset

public RestTemplate createRestTemplate(SimpleClientHttpRequestFactory factory) {

       RestTemplate restTemplate = new RestTemplate(factory);

       List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();

       for (HttpMessageConverter<?> messageConverter : messageConverters) {

           if (messageConverter instanceof StringHttpMessageConverter) {

               ((StringHttpMessageConverter) messageConverter).setDefaultCharset(StandardCharsets.UTF_8);

           }

       }

       return restTemplate;

   }

private void Post(byte[] data) {

       try {

           SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();

           requestFactory.setConnectTimeout(3000);

           requestFactory.setReadTimeout(10000);

           RestTemplate restTemplate=createRestTemplate(requestFactory);

           HttpHeaders headers = new HttpHeaders();

           headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

           headers.add("Domain", "Domain");

           headers.add("Content-Type", "application/octet-stream");

           headers.add("Asr-Protocol", "1");

           HttpEntity<byte[]> entity = new HttpEntity<>(data, headers);

           ResponseEntity responseEntity = restTemplate.postForEntity(JDFinanceEngineTrans.RequestURL,entity, String.class);

           if (responseEntity.getStatusCode() != org.springframework.http.HttpStatus.OK) {

               log.error("Post result failed.status={}", responseEntity.getStatusCodeValue());

           }

           String result = responseEntity.getBody().toString();

           log.info("JD ASR response:{}",result);

           asrResults.add(result);

       } catch (Exception ex) {

           log.error("Post result failed.{}", ex.getMessage());

       }

   }

相关文章
|
Kubernetes Java 应用服务中间件
Spring Boot 系列:最新版优雅停机详解
目前Spring Boot已经发展到了2.3.4.RELEASE,伴随着2.3版本的到来,优雅停机机制也更加完善了。
12796 2
|
存储 关系型数据库 MySQL
DataX: 阿里开源的又一款高效数据同步工具
DataX 是由阿里巴巴集团开源的一款大数据同步工具,旨在解决不同数据存储之间的数据迁移、同步和实时交换的问题。它支持多种数据源和数据存储系统,包括关系型数据库、NoSQL 数据库、Hadoop 等。 DataX 提供了丰富的数据读写插件,可以轻松地将数据从一个数据源抽取出来,并将其加载到另一个数据存储中。它还提供了灵活的配置选项和高度可扩展的架构,以适应各种复杂的数据同步需求。
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
10276 60
|
开发工具 git 开发者
【git merge/rebase】详解合并代码、解决冲突
【git merge/rebase】详解合并代码、解决冲突
2388 0
|
存储 缓存 安全
《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
413 0
|
设计模式 Java 关系型数据库
【阿里规约】阿里开发手册解读——命名规范篇
本文中所有代码命名规范遵循《阿里规约》,从包名、类名、变量名等角度展开,详细阐述测试类、枚举类、数组、布尔型变量、方法等元素的命名规范。
【阿里规约】阿里开发手册解读——命名规范篇
|
消息中间件 存储 Kafka
【Kafka】Kafka 的日志保留期与数据清理策略
【4月更文挑战第13天】【Kafka】Kafka 的日志保留期与数据清理策略
|
安全 Java 数据库
Spring Security自定义登录认证
Spring Security自定义登录认证
565 0
|
关系型数据库 MySQL 数据库
Specified key was too long; max key length is 767 bytes导入mysql数据库表报错
Specified key was too long; max key length is 767 bytes导入mysql数据库表报错
1238 0