Swagger必需的参数在缺少时返回500,而不是404
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swagger必需的参数在缺少时返回500,而不是404相关的知识,希望对你有一定的参考价值。
我有一个REST端点,该端点具有一个请求参数“ myParam”。这是一个必需参数,没有该参数时,对此端点发出的任何GET请求都将被视为错误请求。我正在使用Swagger突出显示需要此参数这一事实,如下所示
@ApiParam(required = true) @RequestParam(value = "myParam") String myParam
问题是,当我通过Postman向该端点提交GET时,返回的HTTP错误为500,表明未提供所需的参数myParam。有什么方法可以重构它,以便如果缺少按要求由Swagger标记的参数,则响应为404?
解决方案可能是创建一个类,并使用@ControllerAdvice
对其进行注释。此类的方法负责处理作为参数传递的特定异常。在您的500
错误中,应该有一个异常堆栈跟踪,例如“由.. org.somepackage.SomeException ...”]造成的。
1)您可以创建一个包含消息和HttpStatus代码的自定义类:
public class ExceptionResponse private HttpStatus httpStatus; private String errorMessage; //getters;setters;
2)带注释的
@ControllerAdvice
类应如下所示:
@ControllerAdvice public class RestExceptionHandler @ExceptionHandler(value = SomeException.class) public ResponseEntity<ExceptionResponse> handleMissingRequiredParameters(SomeException ex) ExceptionResponse exceptionResponse = new ExceptionResponse(); exceptionResponse.setHttpStatus(HttpStatus.BAD_REQUEST); exceptionResponse.setErrorMessage(ex.getMessage()); return new ResponseEntity<>(exceptionResponse, exceptionResponse.getHttpStatus());
现在,当抛出
SomeException
时,您将看到的实际响应是带有自定义ExceptionResponse
和httpStatus
的errorMessage
JSON。
以上是关于Swagger必需的参数在缺少时返回500,而不是404的主要内容,如果未能解决你的问题,请参考以下文章
compojure-api/schema/swagger 中的非必需参数?
Swagger UI 显示 camelCase 参数而不是 PascalCase
内部错误 (500) 是不是应该成为 Swagger API 文档的一部分?
将 Swagger 与 Django Rest Framework 一起使用,我可以在不同字段而不是一个正文中看到 POST 参数吗