Spring 启动 HTTP 状态而不抛出异常
Spring Boot HTTP status without throwing exceptions
我想在不使用 @ExceptionHandler
注释的情况下 return 除 200 之外的 HTTP 状态。
原因是并非每次调用我的应用程序(导致状态不正常)都应该抛出异常,至少在我看来不是。
例如,如果用户试图登录系统,但提供了不准确的密码,我认为没有理由为了能够 return 401 而抛出异常状态。相反,我希望能够从 "regular" 方法中 return 状态。
这背后的原因是抛出不必要的异常既扰乱了我的日志文件,也扰乱了我的日志聚合器 (Rollbar/Sentry) 的每月津贴 "uses"。
我试过使用 @ResponseStatus
和 @ResponseBody
注释方法,但没有成功。
我四处寻找有关该问题的博客文章或其他文章,但找不到任何内容。
知道这是否可行吗?
您可以使用 RessponseEntity
。将 /*STATUS CODE*/
替换为您想要的任何内容:
@GetMapping("/url")
@ResponseBody
public ResponseEntity<?> handlerMethod(/*parameters*/) {
// ...
return ResponseEntity.status(/*STATUS CODE*/).body(...);
}
看看下面的例子
@RestController
public class HelloWorldController {
@GetMapping("/hello")
public ResponseEntity<String> sayHello() {
return ResponseEntity.status(HttpStatus.CREATED).body("Hello World!");
}
}
我想在不使用 @ExceptionHandler
注释的情况下 return 除 200 之外的 HTTP 状态。
原因是并非每次调用我的应用程序(导致状态不正常)都应该抛出异常,至少在我看来不是。
例如,如果用户试图登录系统,但提供了不准确的密码,我认为没有理由为了能够 return 401 而抛出异常状态。相反,我希望能够从 "regular" 方法中 return 状态。
这背后的原因是抛出不必要的异常既扰乱了我的日志文件,也扰乱了我的日志聚合器 (Rollbar/Sentry) 的每月津贴 "uses"。
我试过使用 @ResponseStatus
和 @ResponseBody
注释方法,但没有成功。
我四处寻找有关该问题的博客文章或其他文章,但找不到任何内容。
知道这是否可行吗?
您可以使用 RessponseEntity
。将 /*STATUS CODE*/
替换为您想要的任何内容:
@GetMapping("/url")
@ResponseBody
public ResponseEntity<?> handlerMethod(/*parameters*/) {
// ...
return ResponseEntity.status(/*STATUS CODE*/).body(...);
}
看看下面的例子
@RestController
public class HelloWorldController {
@GetMapping("/hello")
public ResponseEntity<String> sayHello() {
return ResponseEntity.status(HttpStatus.CREATED).body("Hello World!");
}
}