Пользовательские аннотации Java для представления параметров метода и выполнения кода - PullRequest
1 голос
/ 21 марта 2019

Вопрос

По сути, я хочу создать собственную аннотацию для методов. При использовании добавляется параметр метода и строка кода.

Вопрос: Возможно ли это и как?

Пример

Я хочу упростить следующий метод:

@GetMapping("/thing")
public ResponseEntity getThing(@CookieValue("Session-Token") String sessionToken) {
    User user = authenticator.authenticateSessionTokenOrThrow(sessionToken);
    ... // user is successfully authenticated, get the "thing" from the database
}

до

@GetMapping("/thing")
@User
public ResponseEntity getThing() {
    ... // user is successfully authenticated, get the "thing" from the database
}

Как реализовать пользовательскую аннотацию @User, чтобы два вышеупомянутых метода вели себя точно так же, как ? В качестве примера, пожалуйста, не обращайте внимания на тот факт, что приведенный выше код предназначен для платформы Spring Boot.

1 Ответ

1 голос
/ 22 марта 2019

Скажем, у вас есть класс с такими методами

class MyHandlerClass implements Whatever {
    @GetMapping("/thing")
    @User
    public ResponseEntity getThing() {
        ... // user is successfully authenticated, get the "thing" from the database
    }

Вы можете использовать обработку аннотаций для создания такого класса

class AuthenticatingMyHandlerClass extends MyHandlerClass {

    @GetMapping("/thing")
    public ResponseEntity getThing(@CookieValue("Session-Token") String sessionToken) {
        User user = authenticator.authenticateSessionTokenOrThrow(sessionToken);
        ResponseEntity ret = super.getThing(sessionToken);
        doSomethingWith(ret);
        return ret;
    }

Затем вы используете сгенерированный класс вместо основного для обработки запросов, и у вас будет также любой добавленный вами код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...