我想知道,当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>
。
1条答案
按热度按时间gt0wga4j1#
Yes
。由于您使用的是Controller Adviser,因此可以在ResponseEntity中直接将端点返回类型定义为User
**使用通配符(
ResponseEntity<?>
)作为返回类型,符号?
定义控制器方法的返回值可以是任何类型的ResponseEntity。将其用作
ResponseEntity<?>
或简单地将其保持为ResponseEntity<>
都被认为是其用法的原始类型。但是实际上这样做并不是一个好的做法,所以,你必须以
ResponseEntity<ABC>
的格式声明控制器方法的确切返回类型。让我们以返回对象列表的方法的java为例(
List<Object>
)。在这个列表中可以添加一个
Car.class
类型,一个Van.class
类型,但是方法的使用者不应该处理这样的破坏性问题,我们必须定义一个精确的类型。是的,如果您的方法返回用户类型ResponseEntity,则可以使用
ResponseEntity<User>
。我希望这能帮助你解决这个问题:)