jfinal 调用sdk接口(get和post)

本文分享了调用高德地图接口的经验。介绍了get请求,只需将参数拼接在url后。对于post请求,框架自带方法有局限,以删除轨迹接口为例,测试发现参数以x-www-form-urlencoded方式传输可通过,但设置请求头和类型后仍有问题,最后找到能解决问题的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是调用get请求,以查询高德地图轨迹数据为例:

private static final String SEARCH_URL= "https://tsapi.amap.com/v1/track/terminal/trsearch";		// 轨迹查询url
private static final String DELETE_URL = "https://tsapi.amap.com/v1/track/trace/delete";			// 删除轨迹url
private static final String SERVICE_KEY = "xxx";													// 请求服务权限标识
private static final String SERVICE_SID = "xxx";													// 服务的唯一编号
String tid = getPara("tid");
String trid = getPara("trid");
StringBuffer url = new StringBuffer();
url.append(SEARCH_URL)
   .append("?key=").append(SERVICE_KEY)
   .append("&sid=").append(SERVICE_SID)
   .append("&tid=").append(tid)
   .append("&trid=").append(trid);
HttpKit.get(url.toString());

调用get请求时只需要把参数拼接在url后面即可。
然后是post请求,对于post请求框架自带的HttpKit.post(url, data)能应对大部分问题,但仍有一部分情况是不行的,以高德地图删除轨迹为例

Map<String, String> map = new HashMap<String, String>();
map.put("key",SERVICE_KEY);
map.put("sid", SERVICE_SID);
map.put("tid", tid);
map.put("trid", trid);
HttpKit.post(DELETE_URL , JSON.toJSONString(map));

测试结果会提示参数出错,但以相同的参数调用查询轨迹是能够查到数据的,也就是说这种方式是存在问题的,用postman对删除轨迹的接口进行测试,发现参数以x-www-form-urlencoded方式传输,也是能测试通过的,再以上述方式进行调试,能看到有conn.setRequestMethod(method);和conn.setRequestProperty(“Content-Type”,“application/x-www-form-urlencoded”);的设置,也就是设置了请求头和请求类型,但是在查看HttpURLConnection对象时却发现这些值没有设置进去,请求还是get请求(默认为get),request还是为空,挣扎了一番之后还是放弃了,另寻出路,于是搜到如下方式

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.impl.client.DefaultHttpClient;

@SuppressWarnings("deprecation")
public class SSLClient extends DefaultHttpClient {
	public SSLClient() throws Exception{  
	    SSLContext ctx = SSLContext.getInstance("TLS");  
	    X509TrustManager tm = new X509TrustManager() {  
	        @Override 
	        public void checkClientTrusted(X509Certificate[] chain,  
	            String authType) throws CertificateException {  
	        }  
	        @Override 
	        public void checkServerTrusted(X509Certificate[] chain,  
	            String authType) throws CertificateException {  
	        }  
	        @Override 
	        public X509Certificate[] getAcceptedIssuers() {  
	          return null;  
	        }  
	    };  
	    ctx.init(null, new TrustManager[]{tm}, null);  
	}
}

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HttpClientUtil {
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public String doPost(String url,Map<String,String> map,String charset){  
	    HttpClient httpClient = null;  
	    HttpPost httpPost = null;  
	    String result = null;  
	    try{  
	      httpClient = (HttpClient) new SSLClient();  
	      httpPost = new HttpPost(url);  
	      //设置参数  
	      List<NameValuePair> list = new ArrayList<NameValuePair>();  
	      Iterator iterator = map.entrySet().iterator();  
	      while(iterator.hasNext()){  
	        Entry<String,String> elem = (Entry<String, String>) iterator.next();  
	        list.add(new BasicNameValuePair(elem.getKey(),elem.getValue()));  
	      }  
	      if(list.size() > 0){  
	        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,charset);  
	        httpPost.setEntity(entity);  
	      }  
	      HttpResponse response = httpClient.execute(httpPost);  
	      if(response != null){  
	        HttpEntity resEntity = response.getEntity();  
	        if(resEntity != null){  
	          result = EntityUtils.toString(resEntity,charset);  
	        }  
	      }  
	    }catch(Exception ex){  
	      ex.printStackTrace();  
	    }  
	    return result;  
	}  
}

虽然这些看不太懂,但是能解决当前问题,只要直接调用就好了,还是很方便的

Map<String, String> map = new HashMap<String, String>();
map.put("key", SERVICE_KEY);
map.put("sid", SERVICE_SID);
map.put("tid", tid);
map.put("trid", trid);
HttpClientUtil util = new HttpClientUtil();
util.doPost(DELETE_URL, map, "utf-8");
<think>好的,我现在需要帮助用户解决在Java中调用DeepSeek API的问题。用户提到参考了站内引用,其中提到本地部署DeepSeek通过Ollama对接VSCode,但用户现在想用Java调用DeepSeeL接口。首先,我需要确认用户的问题是否有拼写错误,比如“DeepSeeL”是否为“DeepSeek”。假设是拼写错误,接下来需要查找DeepSeek的官方文档,确认是否有Java的SDK或API调用方法。 可能的情况是,DeepSeek可能提供RESTful API,因此用户需要通过Java发送HTTP请求。常见的做法是使用Apache HttpClient或OkHttp库。需要检查这些库的用法,并构造POST请求,设置正确的请求参数,比如API密钥、模型名称、prompt等。 另外,用户需要示例代码,所以需要提供一个简单的Java代码示例,展示如何发送请求处理响应。同时,要提醒用户注意异常处理、API密钥的安全存储,以及可能的依赖库引入,比如Maven或Gradle配置。 还需要指导用户如何查找官方文档,可能包括访问DeepSeek的官方网站,注册账号获取API密钥,查阅他们的开发者文档等。如果DeepSeek没有Java的官方SDK,可能需要用户自行封装HTTP请求。 最后,要确保回答结构清晰,分步骤说明,并附上示例代码注意事项,确保用户能够理解并安全地实现调用。</think>在Java中调用DeepSeek API的完整实现步骤如下: ### 步骤一:获取API凭证 1. 登录DeepSeek开发者平台(https://platform.deepseek.com) 2. 创建新应用,获取API密钥[^1] ### 步骤二:添加HTTP客户端依赖 推荐使用OkHttp3: ```xml <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.12.0</version> </dependency> ``` ### 步骤三:构建API请求 ```java import okhttp3.*; public class DeepSeekClient { private static final String API_URL = "https://api.deepseek.com/v1/chat/completions"; private static final MediaType JSON = MediaType.get("application/json; charset=utf-8"); public static String callAPI(String apiKey, String prompt) throws Exception { OkHttpClient client = new OkHttpClient(); String jsonBody = String.format("{" + "\"model\": \"deepseek-chat\"," + "\"messages\": [{\"role\": \"user\", \"content\": \"%s\"}]" + "}", prompt); RequestBody body = RequestBody.create(jsonBody, JSON); Request request = new Request.Builder() .url(API_URL) .addHeader("Authorization", "Bearer " + apiKey) .post(body) .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new Exception("Unexpected code " + response); return response.body().string(); } } } ``` ### 步骤四:处理API响应 建议使用JSON解析库(如Jackson)处理响应: ```java ObjectMapper mapper = new ObjectMapper(); JsonNode responseJson = mapper.readTree(apiResponse); String answer = responseJson.path("choices").get(0).path("message").path("content").asText(); ``` ### 关键注意事项: 1. API密钥应通过环境变量或安全配置中心存储 2. 建议添加重试机制(指数退避策略) 3. 注意请求速率限制(查看API文档) 4. 使用异步调用提升性能(可考虑CompletableFuture) 官方文档地址:https://platform.deepseek.com/api-docs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值