精华内容
下载资源
问答
  • java调用HTTP接口(Get请求和Post请求
  • Java接口请求响应超时的解决办法

    千次阅读 2021-02-26 15:05:34
    最近在做报表需求的时候,遇到一个问题:前台给...rest.ReadTimeout=35000(建立连接超时时间),rest.ConnectTimeout=5000(连接成功,响应的超时时间)使用异步请求方式,(提前响应);AOP + Annotation,通过AOP拦截接...

    最近在做报表需求的时候,遇到一个问题:

    前台给个请求,由于后台执行逻辑需要很长时间,因此导致页面响应超时。

    在网上查询相关资料,找到了几种解决方案:

    通过修改配置文件,延长响应时间;

    rest.ReadTimeout=35000(建立连接超时时间),rest.ConnectTimeout=5000(连接成功,响应的超时时间)

    使用异步请求方式,(提前响应);

    AOP + Annotation,通过AOP拦截接口计算时间,使用Annotation自定义注解在接口上设置超时时间,可以通过如下链接

    我这里选择使用第二种方案解决,即异步请求方式。

    将需要执行的方法提取成一个类,需要继承Thread类,并实现run方法(主流程方法),添加需要的参数和初始化参数的构造函数:

    class RunThreadTest extends Thread {

    String prop1;

    String prop2;

    public RunThreadTest (String prop1, String prop2) {

    super();

    this.prop1= prop1;

    this.prop2 = prop2;

    }

    @Override

    public void run() {

    //主逻辑

    System.out.println(“正在执行异步请求”);

    System.out.println(prop1 + prop2);<

    展开全文
  • java form-data请求方式 请求接口

    千次阅读 2020-11-24 15:57:47
    java form-data请求方式 请求接口 参数示例 MultiValueMap<String, String> map= new LinkedMultiValueMap<>(); map.add("apikey", kakao_api_push_api_key); map.add("userid",kakao_api_push_userId...

    java form-data请求方式 请求接口


    java访问/请求/调用外部接口通用方法

    参数示例
    MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
                    map.add("apikey", kakao_api_push_api_key);
                    map.add("userid",kakao_api_push_userId);
                    map.add("token",token);
                    map.add("charset","utf-8");
    
    apiUrl  请求地址
    
    /**
         *  rest api 发送消息
         * @param apiUrl  请求地址
         * @param map
         * @return
         */
        public JSONObject httpConnect_send(String apiUrl,MultiValueMap<String, String> map) {
            JSONObject jsonObject = new JSONObject();
            log.info("【 api  send】参数:apiUrl={},map={}", apiUrl, map);
            try {
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
                List<MediaType> acceptableMediaTypes = new ArrayList<>();
                acceptableMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
                acceptableMediaTypes.add(MediaType.APPLICATION_PROBLEM_JSON_UTF8);
                HttpEntity<MultiValueMap<String, String>> requestParams = new HttpEntity<>(map, headers);
                ResponseEntity<String> response = new RestTemplate().postForEntity(apiUrl, requestParams, String.class);
                String result = response.getBody();
                log.info("【 api kakao send】结果result={}",result);
                jsonObject = JSONObject.parseObject(result);
                jsonObject.put("responseCode","200");
            }catch (Exception e){
                log.error("【 api kakao send】异常",e);
                jsonObject.put("responseCode","500");
            }
            return jsonObject;
        }
    
    展开全文
  • 做了一个接口,查询mongdb的,然后根据日志分析发现有个别请求非常慢,甚至主键查询都要几分钟了,通过生产实测,了解 到当时其实据库压力并不大,而且相同的条件直接用sql跑还是1秒左右返回的,就是在用接口调用的...
  • Java实现 接口请求频率限制方案源码

    千次阅读 2020-09-15 20:26:19
    实际工作中在某些业务场景会遇到一个问题,用户疯狂点击某个按钮功能导致接口在短时间内被重复请求多次,且这些重复请求在业务上是无效的请求,这个问题即会导致后端出现大量重复无效或错误的数据,也会对后端服务器...

    实际工作中在某些业务场景会遇到一个问题,用户疯狂点击某个按钮功能导致接口在短时间内被重复请求多次,且这些重复请求在业务上是无效的请求,这个问题即会导致后端出现大量重复无效或错误的数据,也会对后端服务器等造成影响。

    解决方案需要从服务端的部署方式出发

    1.集群部署(如果nginx等转发服务器采用按IP或SESSION_ID等方式的转发策略也可使用单机部署的方案):集群部署的情况推荐使用redis分布式锁进行处理,具体代码方案参考之前的文章:

    Java+RedisTemplate 实现redis分布式锁

    2.单机部署

    单机部署方案适合小型项目采用,直接使用Java代码实现不依赖第三方

    核心:ConcurrentMap + DelayQueue

    实现demo如下

    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.ConcurrentMap;
    import java.util.concurrent.DelayQueue;
    import java.util.concurrent.TimeUnit;
    
    /**
     * 请求唯一值存放类
     */
    public class RequestLimitCache<K, V> {
        //存放每个用户请求的唯一值
    	private ConcurrentMap<K, V> cacheObjMap = new ConcurrentHashMap<>();
        //延迟队列,用于倒计时结束后推出请求唯一值
    	private DelayQueue<DelayItem<Pair<K, V>>> queue = new DelayQueue<>();
        //守护线程
    	private Thread daemonThread;
        //初始化
    	public RequestLimitCache() {
    
    		Runnable daemonTask = new Runnable() {
    			@Override
    			public void run() {
    				daemonCheck();
    			}
    		};
    		daemonThread = new Thread(daemonTask);
    		daemonThread.setDaemon(true);
    		daemonThread.setName("LimitCache Daemon");
    		daemonThread.start();
    	}
        //保持一个线程始终持有延迟队列的监视任务,并处理超时的任务内容
    	private void daemonCheck() {
    		while (true) {
    			try {
    				DelayItem<Pair<K, V>> delayItem = queue.take();
    				if (delayItem != null) {
    					// 超时对象处理
    					Pair<K, V> pair = delayItem.getItem();
    					cacheObjMap.remove(pair.k, pair.v);
    				} else {
    					Thread.sleep(500);
    				}
    			} catch (InterruptedException e) {
    				break;
    			}
    		}
    	}
        // 存入队列方法
    	public void put(K key, V value, long time, TimeUnit unit) {
    		V oldValue = cacheObjMap.put(key, value);
    		if (oldValue != null) {
    			queue.remove(key);
    		}
    		long nanoTime = TimeUnit.MILLISECONDS.convert(time, unit);
    		queue.put(new DelayItem<>(new Pair<>(key, value), nanoTime));
    	}
        // 取出方法
    	public V get(K key) {
    		return cacheObjMap.get(key);
    	}
    }
    import java.util.concurrent.TimeUnit;
    
    /**
     * 单机锁实现类
     */
    @Component
    public class RequestLimit {
    
    	private RequestLimitCache<String, Boolean> requestLimitCache = new RequestLimitCache<>();
        // 默认限制时间
    	private long liveTime = 1000 * 1;
    
        // 自定义限制时间
    	public void checkFast(String key, long liveTime) {
    		Boolean b = requestLimitCache.get(key);
    		if (b != null && b) {
    			throw new Exception(”requestLimit“);
    		}
    		requestLimitCache.put(key, true, liveTime*1000, TimeUnit.MILLISECONDS);
    	}
        // 使用默认限制时间
    	public void checkFast(String key) {
    		checkFast(key, liveTime);
    	}
    
    }

    最后附上调用方法:

    @Autowired
    private RequestLimit requestLimit;
    // 使用默认限制时间
    requestLimit.checkFast("业务名称key" + AppContext.getHttpServletRequest().getSession().getId());
    // 自定义请求限制时间
    requestLimit.checkFast("业务名称key" + AppContext.getHttpServletRequest().getSession().getId(),2);
    
    展开全文
  • java后台请求接口超时的处理

    千次阅读 2019-10-16 16:45:06
    线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors各个方法的弊端: 官方更推荐用T...

    以上内容出自:https://www.cnblogs.com/hzjjames/p/java_timeout.html

    但是遇到一个idea自动提示的错误,如下图:

    线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors各个方法的弊端:

    官方更推荐用ThreadPoolExecutor的方式手动创建线程池。

    于是将上面的代码改为:

    ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(20);
    ExecutorService executorService = new ThreadPoolExecutor(3, 5, 50, TimeUnit.MILLISECONDS, queue);

    警告消除。

            ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(20);
            ExecutorService executorService = new ThreadPoolExecutor(3, 5, 50, TimeUnit.MILLISECONDS, queue);
    
    //        ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);
            Future<String> future = executorService.submit(() -> {
                    try {
                        TimeUnit.SECONDS.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        System.out.println("任务被中断");
                    }
                    return "OK";
            });
            try {
                future.get(5, TimeUnit.SECONDS);
            } catch (InterruptedException | ExecutionException | TimeoutException e) {
                // 参数为true则会强制interrupt中断
                future.cancel(true);
                e.printStackTrace();
                System.out.println("任务超时");
                return "任务超时";
            } finally {
                System.out.println("清理资源");
            }

    代码解读:

    一、callable是函数式接口,可以用lambda表达式简化书写:

    二、future.cancle();

    future.cancel(true);参数可以为false和true,参数为true则会强制interrupt中断正在执行的任务。

    控制台打印任务中断异常:

    三、TimeUnit.SECONDS.sleep(10);

    底层调用的还是Thread.sleep()方法:

    参考链接:

    1.futureTask解读:https://www.cnblogs.com/maypattis/p/5827671.html

    2.Executor、Executors、ExecutorService:https://blog.csdn.net/weixin_40304387/article/details/80508236

    3.Thread.sleep()和TimeUnit.SECONDS.sleep()的区别与联系https://www.cnblogs.com/sanhuan/p/4826401.html

    展开全文
  • post,get方式请求接口封装,参数加密方式请求,参数RSA签名, 转换字符集到utf8,base64编码字符串
  • JAVA 调用HTTP接口POST或GET实现方式java通用
  • java http请求接口返回值乱码

    万次阅读 2019-04-14 15:08:07
    //请求方式 conn.setRequestMethod(type); //设置是否从httpUrlConnection读入,默认情况下是true; httpUrlConnection.setDoInput(true); conn.setDoOutput(true); //allowUserInteraction 如果为 true,...
  • Java 接口请求异步响应

    万次阅读 2018-01-08 17:38:56
    背景:接口请求的时候如果是同步,那么有时业务逻辑处理时间很长,请求就会超时! 所以需要在接口请求过来时,就先响应,再去执行业务逻辑。 1.创建一个Controller类用来接收接口请求 @RestController @...
  • java 打印请求接口响应时间

    千次阅读 2020-01-07 09:49:42
    long start = System.currentTimeMillis(); //访问接口 long end = System.currentTimeMillis(); System.out.println("耗时:" + (end - start) + "ms");
  • server return http response code :405 for url 这个怎么解决,调用接口规定以put方式
  • java后台请求接口超时的处理(二)

    万次阅读 2019-10-18 16:54:25
    一、前端访问后台接口设置超时时间 spring官方提供的配置:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html # SPRING MVC (WebMvcProperties) spring.mvc....
  • java通过http方式代理请求api接口

    千次阅读 2018-11-29 11:28:13
    最近在对接客户那边第三方合作的http api接口的时候,发现通过java代码的方式请求第三方http接口,发现在我本地可以正常访问,但是把程序部署到客户那边的服务器上就发生超时,找不到访问地址的错误。通过测试发现,...
  • java 计算接口请求的时间

    万次阅读 2018-09-04 15:00:19
    思路都是将date转成long类型进行减操作 方法一: LocalDateTime beginTime = LocalDateTime.now(); Long timeConsuming = Duration.between(between,LocalDateTime.now()).toMillis(); ...Long beginTime = new ...
  • Java HTTP请求接口返回值乱码

    千次阅读 2020-07-29 10:20:33
    系统访问第三方系统接口时乱码,(我遇到的问题是 本地运行时,中文不乱码。当部署到Linux服务器上时第三方接口返回的数据就中文乱码) { "code": 400, "msg": "���������������", "error": ...
  • 1.RestTemplate 方式 import org.apache.commons.httpclient.HttpClient; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.springframework....
  • java post 请求接口

    千次阅读 2018-09-17 10:22:57
    public static JSONObject doPost(String url,JSONObject json){  DefaultHttpClient client = new DefaultHttpClient();  HttpPost post = new HttpPost(url);  JSONObject response = null; ...
  • 在微信公众号开发中,经常后台控制页面返回显示,在java中可根据HttpServletRequest的方法进行判断。 /** * 查看微信页面访问端 * * @return 1 、移动微信端 ;2 、移动浏览器端;3、PC微信端;4、PC浏览器端; ...
  • java控制api请求接口的次数(附代码)

    千次阅读 2019-08-07 11:07:12
    本功能的基本思想就是全局增加一个过滤器filter,,如果在指定...以下只是最简单的实现方式,需要的话可以自行拓展。 1.建立四个类 AccessStatus.java CommonService.java FrequentAccessControlFilter.java...
  • 如何调用其他项目的接口 首先引入依赖包 <!-- httpclient依赖 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> ...
  • * @param url 接口地址 * @param params 请求参数 * @return */ public String getWebServiceData(String url,String params) throws IOException { //接受返回报文 String result = new String(); ...
  • 接口请求的八种方式详解

    万次阅读 2019-07-11 22:20:21
    接口请求的八种方式: 1、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体) 2、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改 3、Put 向...
  • Python调用java接口发送post,get请求

    千次阅读 2019-11-21 10:10:52
    先看java的post接口: @RequestMapping(value="/createChart", method = RequestMethod.POST) @ResponseBody public String getChartData(@RequestBody Map<String,String> map) { String imgPa...
  • java响应请求下载文件的http接口

    千次阅读 2018-07-04 13:55:03
    byte [] pdfbyte = ToolsBox.File2byte(new File(outputFilePath2)); OutputStream stream = null; try { stream = response.getOutputStream(); stream.write(pdfbyte);...
  • Java程序中请求http接口

    千次阅读 2019-06-02 19:33:29
    Java请求http接口 方法1 此方法需要httpclient-4.4.jar,httpcore-4.4.jar,并在头部引入包 import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; ...
  • java post请求调用参数格式为form-data的接口

    万次阅读 多人点赞 2019-06-14 13:34:57
    接口参数使用postman调用如图所示,只能使用form-data格式调用 public static String doPost(String url, HashMap<String, String> map) throws Exception { String result = ""; ...
  • python调用java接口发送post请求

    千次阅读 2020-03-30 22:03:35
    我知道我要做的任务了,就是到数据库定时查询出数据,然后调用java接口将数据通过python加密后保存到java数据库。那先不加密试一下能不能调通java接口呗。调用发现失败 然后去把json数据拿到postman调用发现成功...
  • java编写接口发送POST请求

    千次阅读 2019-08-28 16:50:17
    java编写接口发送post请求 public static String send(String url, Map<String,String> map) throws ParseException, IOException{ String body = “”; //创建httpclient对象 CloseableHttpClient client = ...
  • java实现调用httpclient接口的类和方法,包括了get和post传参方式,简单易懂

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 718,012
精华内容 287,204
关键字:

java接口请求方式

java 订阅