Приложение My Spring Boot имеет набор классов контроллеров REST, каждый из которых выполняет более или менее одинаковые стандартные операции CRUD на своих соответствующих моделях, только с разными именами конечных точек (одно - /user
, другое - /group
, et c). Имеет смысл упаковать это поведение в базовый класс, который, возможно, называется Controller
.
Во-первых, есть ли уже такой базовый класс в Spring, который я пропустил? Кажется, это удобное поведение, которое может понадобиться многим, поэтому я удивлен, что не могу его найти.
Если нет, и мне нужно написать это самому, моя проблема: что мне делать с аннотации сопоставления запросов, например @GetMapping
и @PostMapping
? Их аргумент value
должен быть постоянным, поэтому я не могу просто использовать аннотации в суперклассе и вставлять в них каждое имя конечной точки, как в @GetMapping("/" + endpointName + "/{id}")
. Могу ли я написать свои методы обработки запросов без аннотаций, а затем обернуть и аннотировать их в каждом из моих 5-6 подклассов, как это?
@RestController
public abstract class Controller<T> {
public ResponseEntity<T> create(T obj) {
// Creation behaviour
}
// Same for retrieve, update, etc
}
...
public class UserController extends Controller<User> {
@Override
@PostMapping("/user")
public ResponseEntity<User> create(@RequestBody User user) {
return super.create(user);
}
// Repeat for other operations
}
// and repeat for all the other subclasses
Это кажется немного избыточным; Я был бы рад, если бы был способ чище.