我正在Sping Boot 上开发一个应用程序,我有两个控制器来处理电影和用户。这两个控制器都有类似的端点,我想创建一个抽象类来简化和扩展我的代码。下面是我用途:使用的控制器示例:
@RestController
public class FilmController {
private static Map<Integer, Film> films = new HashMap<>();
@PostMapping("/film")
public Film addFilm(@RequestBody Film film) {
films.put(film.getId(), film);
return film;
}
@PutMapping("/film")
private Film updateFilm(@RequestBody Film film) {
films.put(film.getId(), film);
return film;
}
@GetMapping("/films")
private List<Film> getAllFilms() {
return new ArrayList<>(films.values());
}
}
个字符
我可以使用一个抽象类与泛型吗?如果可以,我怎么做?我想创建一个抽象类,将处理这两个控制器的公共逻辑。你能给我解释一下,什么是更好的使用和为什么?
3条答案
按热度按时间ao218c7q1#
看起来通用的CRUD控制器是您所追求的。
在这种情况下,我建议你看看
spring-data-rest
。获取所有CRUD功能就像用
@RepositoryRestResource
注解Spring Data存储库一样简单。当然,如果您计划使用Spring Data作为实体的持久化层。
92dk7w1h2#
是否可以接受以下内容?
1.创建通用控制器对象
字符串
这为您创建控制器和方法提供了基础。
1.创建接口以确保泛型方法正常工作。在上面的例子中,创建对象需要一个id。因此,我创建了一个名为Identifiable的接口,并让genericController中的T扩展它。
型
1.创建你的控制器,根据需要自动装配genericMap(不要忘记在某个@Configuration类中将通用Map设置为bean!)
型
顺便说一下,我认为只有在一定程度上你才能重构/泛化你的代码。如果我在想你想要什么,你想要一个通用/抽象控制器,那么你只需要在指定类型的同时扩展它,就可以了。但是,你仍然需要指定RequestMapping的端点,因为如果我没有弄错的话,你将无法动态配置它。所以即使这样,类应该看起来像这样:
型
vhipe2zx3#
你绝对可以!试试这样:
字符串
但是我建议你使用
ResponseEntity<>
来处理http异常。