百度翻译API整合SpringBoot

案例背景,按照官方给的Demo,实在是太啰嗦了,

大致步骤

封装数据>签名>发送请求,

仔细一看劈里啪啦一大堆,最后还要手动关流关连接,难道整合到SpringBoot项目里面我还得为内存管理考虑

所以就有了如下需求

使用

复制代码
RestTemplate的对象进行发送请求数据,RestTemplate由springboot自行管理
java 复制代码
package com.example.demo2.baidu2;

import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;

public class Trans {
    private static final String APP_ID = "自己的APPID";
    private static final String SECURITY_KEY = "自己的密钥";

    private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/translate";

    public static void main(String[] args) throws UnsupportedEncodingException {
        String query = "高度600米";


        Map<String, String> params = new HashMap<String, String>();
        params.put("q", query);
        params.put("from", "auto");
        params.put("to", "en");
        params.put("appid", APP_ID);
        // 随机数
        String salt = String.valueOf(System.currentTimeMillis());
        params.put("salt", salt);
        // 签名
        String src = APP_ID + query + salt + SECURITY_KEY; // 加密前的原文
        String md5 = getMD5(src);
        md5= md5.toLowerCase();
        params.put("sign", md5);
        String s = get(TRANS_API_HOST, params);
        System.out.println(s);

    }

    public static String get(String host, Map<String, String> params2) throws UnsupportedEncodingException {

        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
        String s = params2.get("q");
        String salt = params2.get("salt");
        String appid = params2.get("appid");
        String to = params2.get("to");
        String from = params2.get("from");
        String sign = params2.get("sign");

//        String encode = URLEncoder.encode(s, "UTF-8");
        params.add("salt",salt);
        params.add("appid",appid);
        params.add("to",to);
        params.add("from",from);
        params.add("q",s);
        params.add("sign",sign);



        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response = restTemplate.exchange(host, HttpMethod.POST, requestEntity, String.class);

        int statusCode = response.getStatusCodeValue();
        if (statusCode != 200) {
            System.out.println("Http错误码:" + statusCode);
        }

        return response.getBody();

    }

    public static String getMD5(String s) {
        char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        try {
            byte[] btInput = s.getBytes(StandardCharsets.UTF_8);
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char[] str = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


}
相关推荐
陈随易7 小时前
pm2 替代品,nodejs&bun 线上部署必备工具
前端·后端·程序员
丘山一郎8 小时前
Spring 中的IOC控制反转 和DI依赖注入
java·后端·spring
码视野8 小时前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
MetaLite8 小时前
Spring-AOP自调用为什么失效-AopContext真能解决吗
java·后端·spring
大模型码小白8 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
许彰午8 小时前
14-字段级SM4加密与SM2签名
java·低代码·架构
MC皮蛋侠客8 小时前
Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力
开发语言·后端·rust
许彰午10 小时前
13-describe元数据输出
java·低代码·架构·状态模式
李昊哲小课10 小时前
SpringBoot4 云端咖啡站 阶段二:数据访问与分层架构
spring boot·架构
Profile排查笔记10 小时前
指纹浏览器怎么设置 IP?代理配置、检测与排错流程
前端·人工智能·后端·自动化