【问题标题】:Receive the HTTP status after a request with Spring MVC使用 Spring MVC 请求后接收 HTTP 状态
【发布时间】:2012-05-15 10:17:30
【问题描述】:

我正在向服务器发送数据,我想接收 HTTP 响应状态以检查此状态并提供适当的视图

   @RequestMapping(method = RequestMethod.POST)
     public String Login(@ModelAttribute("Attribute") Login login, Model model,HttpServletRequest request) {

          // Prepare acceptable media type
          ArrayList<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
          acceptableMediaTypes.add(MediaType.APPLICATION_XML);

          // Prepare header
          HttpHeaders headers = new HttpHeaders();
          headers.setAccept(acceptableMediaTypes);

          HttpEntity<Login> entity = new HttpEntity<Login>(login, headers);

          // Send the request as POST
          try {
           ResponseEntity<Login> result = restTemplate.exchange("http://www.../user/login/", 
                   HttpMethod.POST, entity, Login.class);
          } catch (Exception e) {
          }
      //here i want to check the received status
      if(status=="OK"){
         return "login"
      }
      else          
      return "redirect:/home";
     }

【问题讨论】:

    标签: java spring-mvc http-headers


    【解决方案1】:

    ResponseEntity 对象包含 HTTP 状态代码。

    // Prepare acceptable media type
    ArrayList<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
    acceptableMediaTypes.add(MediaType.APPLICATION_XML);
    
    // Prepare header
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(acceptableMediaTypes);
    
    HttpEntity<Login> entity = new HttpEntity<Login>(login, headers);
    // Create status variable outside of try-catch block
    HttpStatus statusCode = null;
    
    // Send the request as POST
    try {
      ResponseEntity<Login> result = restTemplate.exchange("http://www.../user/login/", 
      HttpMethod.POST, entity, Login.class);
      // Retrieve status code from ResponseEntity
      statusCode = result.getStatusCode();
    } catch (Exception e) {
    }
    // Check if status code is OK
    if (statusCode == HttpStatus.OK) {
      return "login"
    }
    else          
      return "redirect:/home";
    

    【讨论】:

    • 我认为上面的代码有一个小问题。当我尝试它时,我看到 statusCode 始终为空。我正在查看服务器,我看到请求已经完成。你知道为什么吗?
    • @AlexDowining Typo(我输入了 entity.getStatusCode 而不是 result.getStatusCode)。试试修改后的版本,看看效果是否更好。
    • 我正在尝试这个,但我在 ResponseEntity result = restTemplate.exchange("../user/login", HttpMethod.POST, entity, Login.class);我无法执行该行:statusCode = result.getStatusCode();
    • @AlexDowining 我将 statusCode 变量的初始化添加为 null。如果抛出异常,该变量将保持为空(或者您可以在 catch 块中手动设置特定的状态代码。
    • 您好,谢谢您的回复。实际上我的问题是我接受了一个例外,因此 statusCode=result.getStatusCode();无法执行。如果你想你可以看看这里:stackoverflow.com/questions/10507650/…
    【解决方案2】:

    有什么问题:

    HttpStatus status = result.getStatusCode();
    if(status == HttpStatus.OK)
    

    请参阅:ResponseEntityJavaDoc。

    顺便说一句,你不应该像这里那样使用== 运算符比较字符串:

    status=="OK"
    

    改为使用以下成语:

    "OK".equals(status)
    

    Java 中的方法名称也倾向于以小写开头。

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 2017-12-20
      • 2016-04-20
      • 2019-03-25
      • 2015-01-31
      • 1970-01-01
      • 2012-06-24
      • 2015-04-09
      • 2016-03-29
      相关资源
      最近更新 更多