java为什么ResponseEntity<T>是泛型的?
想象一下这个简单的控制器方法:
public ResponseEntity<?> findById(@Parameter(description = "id") @PathVariable String id) {
Optional<Model> model = repository.findById(id);
if(model.isEmpty()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body("Model not found");
}
return ResponseEntity.status(HttpStatus.OK)
.body(model.get());
}
如果找到模型,则返回该模型;如果未找到,则返回错误字符串消息。情况可能比这更复杂
所以我返回了String
或Model
类型,它们不能绑定到ResponseEntity
的泛型类型
我的问题是为什么spring团队将这个类设计为泛型类型?还是我用错了这个东西
# 1 楼答案
当您定义API时,您定义了操作正常时将返回的对象的类型,这是您应该在响应实体的通用类型中使用的对象
如果要返回不同的类型,可以删除泛型并只返回ResponseEntity,然后向其中添加所需的任何对象
# 2 楼答案
除其他原因外,Spring的^{} HTTP客户机还返回了
ResponseEntity<T>
。泛型类型允许客户机代码指定用于解释HTTP响应并获取适当的Java对象作为响应体的类型