【问题标题】:@ResponseStatus, the client does not receive an error message@ResponseStatus,客户端没有收到错误信息
【发布时间】:2017-04-06 19:13:18
【问题描述】:

我有一个自定义异常的代码:

@ResponseStatus(value = BAD_REQUEST, reason = "Login is busy")
    public class LoginIsBusyException extends RuntimeException{
}

还有一个可以抛出的方法:

@RequestMapping(method = POST) 
public void registration(@RequestBody UserRest user) throws 
LoginIsBusyException{
  userService.checkAlreadyExist(user.getLogin(), user.getMail());
  user.setActive(false);
  UserRest userRest = userService.addUser(user);
  Integer randomToken = randomTokenService.getRandomToken(userRest.getMail());
  mailService.sendMail(randomToken, userRest.getLogin(), userRest.getMail());
}

问题是客户端只收到错误码,没有收到statusText“登录正忙”,已经尝试添加捕获这个异常的方法

@ExceptionHandler(LoginIsBusyException.class)
public void handleException(HttpServletResponse response) throws IOException 
{
   response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Login is busy");
}

但是,消息在某处丢失,客户收到以下响应:

【问题讨论】:

    标签: java rest spring-mvc response


    【解决方案1】:

    您的handleException 方法错过了@ResponseBody,并且它用您当前的代码返回void,即您没有传递response 正文,如下所示:

    @ResponseBody
    @ExceptionHandler(LoginIsBusyException.class)
    public String handleException(HttpServletResponse response) throws IOException 
    {
       response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Login is busy");
    }
    

    否则你使用ResponseEntity 来生成如下所示的标题和正文

    @ExceptionHandler(LoginIsBusyException.class)
    public ResponseEntity<String> 
                    handleException(LoginIsBusyException exe) {
       return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Login is busy");
    }
    

    【讨论】:

    • 非常感谢您的回答。但我没有使用@ResponseBody,因为我使用了@RestController 注释。我以不同的方式决定了这个问题。更准确地说,我错误地等待消息出现在标题中。消息在 json 正文中。当我在 SoapUi 中得到响应时,我明白了这一点。自定义异常正常工作,这是我的错误。你的答案也是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2022-06-13
    • 2021-04-08
    相关资源
    最近更新 更多