java - 如何从 HttpURLConnection 创建 ResponseEntity?

标签 java spring rest controller

我想将 HttpURLConnection 的响应检索到 ResponseEntity 中。我收到 406 错误。

提前谢谢您。

@RequestMapping(value = "/retrive", method = { RequestMethod.GET })
    public ResponseEntity<?> retrive (HttpServletRequest request){
        //1. call a rest by rest client
        URL u = new URL("http://localhost:8080/getHello");
        HttpURLConnection uc = (HttpURLConnection) u.openConnection();

        //2, create HttpHeaders for ResponseEntity
        HttpHeaders responseHeaders = new HttpHeaders();
        for (int i = 0;; i++) {
          String headerName = uc.getHeaderFieldKey(i);
          String headerValue = uc.getHeaderField(i);
          if(headerName != null && headerValue != null){
            responseHeaders.set(headerName, headerValue);
          }
          if (headerName == null && headerValue == null) {
            break;
          }
        }
        //3. create ResponseEntity
        InputStream inputStream = uc.getInputStream();
        return new ResponseEntity<>(inputStream, responseHeaders, HttpStatus.OK);
    }

最佳答案

假设您正在尝试构建某种反向代理,那么您只需从输入流复制到输出流即可:

  @RequestMapping(value = "/retrive", method = { RequestMethod.GET })
  public ResponseEntity<?> retrive (HttpServletRequest request, HttpServletResponse response){
    //1. call a rest by rest client
    URL u = new URL("http://localhost:8080/getHello");
    HttpURLConnection uc = (HttpURLConnection) u.openConnection();

    //2, create HttpHeaders for ResponseEntity
    HttpHeaders responseHeaders = new HttpHeaders();
    for (int i = 0;; i++) {
      String headerName = uc.getHeaderFieldKey(i);
      String headerValue = uc.getHeaderField(i);
      if(headerName != null && headerValue != null){
        responseHeaders.set(headerName, headerValue);
      }
      if (headerName == null && headerValue == null) {
        break;
      }
    }

    try (InputStream inputStream = uc.getInputStream();
         OutputStream outputStream = response.getOutputStream();
        )
    {
      IOUtils.copy(inputStream, outputStream);
    }
    //3. create ResponseEntity
    return new ResponseEntity<>(responseHeaders, HttpStatus.OK);
  }

关于java - 如何从 HttpURLConnection 创建 ResponseEntity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38747421/

相关文章:

java - 奇怪的分配和字符串连接优化代码的一些描述

spring - 在 Spring Boot 中抛出 NoSuchMethodError 的编译时方面

java - 使用Spring在项目目录中存储文件

java - RESTful API 客户端如何保存 oAuth token 以供将来的请求使用?

java - 如何接受参数值列表作为 REST 中的输入?

java - 在哪里可以找到数学解析器/引擎的测试?

java - 项目上的抽屉导航点击仍保留在主页 fragment 上

java - 将 swagger 生成的服务器 stub 连接到真实的 mysql 数据库

java - 如何使用 Spring Batch 通过 XSSFSheet XML Handler.SheetContentsHandler 指定日期格式?

java - Spring Boot - 找不到放心的方法