通过response返回响应


    @PostMapping("/test/1")
    public Object earlyReturn(HttpServletRequest request, HttpServletResponse response) throws Exception {
        JSONObject resp = new JSONObject();
        resp.put("uri", request.getRequestURI());
        resp.put("url", request.getRequestURL());

        //设置响应报文为json格式
        response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);

        PrintWriter out = response.getWriter();
        out.print(resp.toString());//设置响应报文
        out.close();//强制返回
        System.out.println("http响应已返回 " + System.currentTimeMillis());

        System.out.println("响应返回后,可以继续执行其他逻辑..." + System.currentTimeMillis());
        Thread.sleep(3000);//模拟耗时
        System.out.println("执行完毕 " + System.currentTimeMillis());

        return null;
    }

通过线程执行耗时逻辑

进一步优化则可通过线程池执行逻辑


    @PostMapping("/test/2")
    public Object earlyReturn2(HttpServletRequest request, HttpServletResponse response) throws Exception {
        JSONObject resp = new JSONObject();
        resp.put("uri", request.getRequestURI());
        resp.put("url", request.getRequestURL());

        System.out.println("创建新线程去执行其他逻辑,不会阻塞当前请求");
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("新线程内逻辑执行..." + System.currentTimeMillis());
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("执行完毕 " + System.currentTimeMillis());
            }
        }).start();

        System.out.println("http响应返回 " + System.currentTimeMillis());
        return resp;
    }

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐