首页 > 解决方案 > 有没有办法从 json 或 yml 而不是类中引用 swagger @ApiResponse 中的响应?

问题描述

我在控制器中使用了以下注释:

@ApiResponse(code = 400, message = "failed", response = MediaDataProductResponseV2.class)}

如您所见,响应字符串是根据类显示的。如何引用来自 yml 或 json 等文件的响应?

例子

@ApiResponse(code = 400, message = "failed", response = "${error}")} -> this doesn't work

我遇到的问题是公司的代码将所有错误和成功对象包含在一个 pojo 中,因此无法分离我们发送给客户的响应类型。假设我们有以下 pojo 响应:

public class pojo{
       private String error;
       private String response;
       … setters and getters...
    }
    

如果出现问题,我们只返回错误部分。如果成功,则响应。我无法在注释中指出这一点,因为它总是会序列化整个事情,我不想玩这些 pojo,因为它们是从 json 模式生成的。我需要引用其他不能成为类的响应。

标签: javaspring-bootswagger

解决方案


错误处理是一个横切关注点,因此不应与业务逻辑纠缠在一起。因此,最好有一个单独的类@ControllerAdvice来处理故障。

然后,您定义一个方法,该方法将异常和 aHttpServletRequest作为参数并返回ResponseEntity包含您要返回的错误消息的类型的 a。

此方法用 注释@ExceptionHandler(myException.class)。异常本身带有注释@ResponseStatus(HTTPSTATUS.MYSTATUS)。这样,您就可以将错误处理集中在一个地方,同时将错误处理应用于所有控制器。

但是,您可以通过将basePackageClasses作为参数传递给@ControllerAdvice注释来覆盖它。


推荐阅读