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

如何在Java中重新抛出异常

向实
2023-03-14
    responses:
        '200':
            content:
                application/json:
                    schema:
                        $ref: '#/components/schemas/MyResponse'
            description: OK
        '401':
            content:
                application/json:
                    schema:
                        $ref: '#/components/schemas/MyError'
    @ApiResponses(value = { 
        @ApiResponse(responseCode = "200", description = "Authentication succeeded", content = @Content(mediaType = "application/json", schema = @Schema(implementation = MyResponse.class))),
        
        @ApiResponse(responseCode = "401", description = "Authentication failed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = MyError.class))) })
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    default ResponseEntity<MyResponse> LoginMethod(//some parameters...) { //something}
    public ResponseEntity<MyResponse> LoginMethod(//some parameters...) {
try { 
  //call external API which throw an exception 
} catch(ApiException e){
  e.getResponseBody; // This is a string type of MyError class in JSON format returned
  // throw e;
}

@apiResponse似乎也没有更正响应类型。

如本问题所述,如何在swagger Codegen中处理多个响应/返回类型(204为空,400为非空等)?

我可以这样扔

throw new ResponseStatusException(HttpStatus.valueOf(e.getCode()), e.getResponseBody());

但是有没有更好的方法来做到这一点呢?我只想将.getResponseBody()作为对象而不是字符串返回。

非常感谢。

共有1个答案

穆嘉
2023-03-14

您可以在throws声明中添加apiexception,如下所示:

public ResponseEntity<MyResponse> LoginMethod(//some parameters...) throws ApiException {
   // here your code that can create teh ApiException
}

现在调用这个的方法也会请求throw异常。您将能够在其中管理异常。

您还可以创建一个包含所有所需信息的新对象。它还将信息格式化为始终相同,而不依赖于抛出的错误。

 类似资料:
  • 问题内容: 我有一个关于Java中重新引发异常的非常简单的问题。 这是代码片段: 为什么我们需要在第一个版本中重新抛出,而第二个版本看起来更优雅?可能有什么好处,并且优先选择哪个版本? 问题答案: 你是对的。第二版更好。而且,第一个版本没有任何意义。除了异常的堆栈跟踪为“错误”之外,它的功能相同。 有“重新抛出”异常的原因如下: 如果您之前有事要做。 如果捕获一种类型的异常并抛出另一种类型的异常:

  • 我有这样的情况,即活动调用管理器类调用提供者。 活动->管理器(带有asyncTask的方法)->提供程序 我应该如何将捕获的异常发送回活动?

  • 如何在Lambda中处理和重新抛出异常?当我试图用try/catch块包围调用时,它只是在lambda表达式中捕获它。我在方法签名中有ServiceException,所以我只想重新抛出它。是可能还是我漏掉了什么?

  • 你怎么捕获一个异常,之后在另外一个线程上重新抛出?使用在标准文档18.8.5中描述的异常传递中的方法吧,那将显示标准库的魔力。 exception_ptr current_exception(); 返回一个exception_ptr 变量,它将指向现在正在处理的异常(15.3)或者现在正在处理的异常的副本(拷贝),或者有的时候在当前没有遇到异常的时候,返回值为一个空的exception_ptr变量

  • 假设我想在收到特定异常时恢复某个值,否则返回失败的未来。我希望是这样的: 如果函数会抛出检查过的异常,我想在链式方法中处理它。我尝试过和,但都无法编译。是否为这种情况提供了任何解决方案?我知道接口是方法的参数,它不会抛出任何异常——在这种情况下,我只想返回已经失败的未来。我想找到使用Java8的解决方案。