当前位置: 首页 > 知识库问答 >
问题:

Swagger必需参数在丢失时返回500而不是404

卞琨
2023-03-14

我有一个RESTendpoint,它有一个请求参数“myParam”。这是一个必需参数,如果没有该参数,则向该endpoint发出的任何GET请求都将被视为错误请求。我使用Swagger来强调这个参数是必需的,如下所示

@ApiParam(required = true) @RequestParam(value = "myParam") String myParam

问题是,当我通过Postman向此endpoint提交GET时,返回的HTTP错误是500,表示未提供所需的参数myParam。是否有任何方法对此进行重构,以便如果Swagger标记为所需的参数丢失,则响应为404?

共有1个答案

景帅
2023-03-14

解决方案可能是创建一个类,并用@ControllerAdvice对其进行注释。此类的方法负责处理作为参数传递的特定异常。在 500 错误中,应该有一个异常堆栈跟踪,如“由 ..org.somepackage.SomeException ...“.

1) 您可以创建包含消息和HttpStatus代码的自定义类:

public class ExceptionResponse {
  private HttpStatus httpStatus;
  private String errorMessage;
  //getters;setters;
}

2)带注释的类应该如下所示:

@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时,您将看到的实际响应是一个异常响应JSON,其中包含自定义httpStatuserrorMessage

 类似资料:
  • 我正在使用org。springiframework。网状物客户RestTemplate用于一些Java测试,以编写一些新代码的单元测试。我预计这些调用会失败(我正在测试身份验证) 调用不是返回预期的401代码,甚至不是500代码,而是抛出异常。 电话是这样的: 我怀疑我错过了一些非常明显的东西,但我不知道它是什么。这难道不应该简单地返回一个状态代码=401的实体响应吗?

  • 我正在编写一个小型python游戏,我的一些代码似乎不起作用。看一看: 是啊......所以错误是:

  • 我用的是Spring Boot 2.5.4和Swagger 3。我在Swagger配置文件中添加了一个全局请求参数作为类型头,required=true。Swagger UI在所有API中正确地显示了所需的请求头,但问题是它允许在所需请求头的值为空时发送请求。在Swagger 2中,UI曾经禁止发送请求,直到值被填充。 任何建议。

  • 我有一个 asp.net MVC 2 Web 应用程序在所有中间层控制器操作中,我捕获所有异常,记录,然后重新抛出异常。此重写由 JQuery Ajax 错误处理程序拾取 我正在通过JQuery进行一个ajax调用,如下所示 出于某种原因,jqXHR。responseText不再返回任何内容,我在解析responseText时遇到错误。我认为这可能是IIS设置,因为我们最近切换到新的Web服务器。

  • 我有一个问题,我做了一个乒乓游戏,但我有一个问题,把分数打印到pyplay窗口。 我得到错误'TypeError:参数1必须是pygame.Surface,而不是str 我在文本中输入了blit,但出现了一个错误。我知道代码乱七八糟,我稍后会修复它