Spring Boot ResponseEntity返回类型通配符与swagger生成的接口

szqfcxe2  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(277)

我想知道,当Swagger生成的API接口包含2个不同的类作为返回类型(即一个用于异常,另一个用于正常流)时,使用通配符VSResponseEntity<ABC.class>作为返回类型返回ResponseEntity<?>之间的区别。
我的控制器接口是:-

@Operation(summary = "Get user by user name", tags = { "user" })
   @ApiResponses(value = {
       @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(schema = @Schema(implementation = User.class))),
       @ApiResponse(responseCode = "400", description = "Invalid username supplied", content = @Content(schema = @Schema(implementation = Error.class)))
   })
   @GetMapping(value = "/user/{username}", produces = { "application/xml", "application/json" })
   ResponseEntity<?> getUserByName(@PathVariable("username") String username);

@架构定义了返回类型。

对于getUserByName方法,是否可以使用ResponseEntity<User>代替<?>
我的应用程序中有全局异常处理程序@ControllerAdvice,它返回ResponseEntity<Error>

gt0wga4j

gt0wga4j1#

    • 您问题的答案是Yes。由于您使用的是Controller Adviser,因此可以在ResponseEntity中直接将端点返回类型定义为User**

使用通配符(ResponseEntity<?>)作为返回类型,符号?定义控制器方法的返回值可以是任何类型的ResponseEntity。
将其用作ResponseEntity<?>或简单地将其保持为ResponseEntity<>都被认为是其用法的原始类型。
但是实际上这样做并不是一个好的做法,所以,你必须以ResponseEntity<ABC>的格式声明控制器方法的确切返回类型。
让我们以返回对象列表的方法的java为例(List<Object>)。
在这个列表中可以添加一个Car.class类型,一个Van.class类型,但是方法的使用者不应该处理这样的破坏性问题,我们必须定义一个精确的类型。
是的,如果您的方法返回用户类型ResponseEntity,则可以使用ResponseEntity<User>
我希望这能帮助你解决这个问题:)

相关问题