Spring restful API, есть ли метод, используемый как маршрутизатор, чтобы получить конечные точки или URL другого метода? - PullRequest
0 голосов
/ 24 апреля 2018
@RequestMapping("/accounts")
public class controller {
    @GetMapping("/get/{id}")
    public final ResponseEntity<?> getHandler(){
    }
    @PostMapping(value = "/create")
    public final ResponseEntity<?> createHandler(){
    /*
     trying to use some spring library methods to get the url string of 
     '/accounts/get/{id}' instead of manually hard coding it 
    */
    }
}

Это фиктивный код, теперь я в createHandler, после завершения создания чего-то, затем я хочу вернуть заголовок, включающий строку URL, но я не хочу вручную соединять эту строку URL ('/account / get / {id} '), который является конечной точкой метода getHandler(), поэтому мне интересно, есть ли метод, который можно использовать для достижения этой цели?Я знаю request.getRequestURI(), но это только для URI в текущем контексте.

Дополнительные пояснения: если есть какая-то библиотека или фреймворк с реализацией маршрута:

Routes.Accounts.get(1234)

, которые возвращают URL для учетных записей, получают

/api/accounts/1234

1 Ответ

0 голосов
/ 24 апреля 2018

Идея в том, что вам не нужно указывать get или create (глаголы - это большое нет-нет в REST).

Представьте себе это:

@RequestMapping("/accounts")
public class controller {
    @GetMapping("/{id}")
    public final ResponseEntity<?> getHandler(@PathVariable("id") String id) {
        //just to illustrate
        return complicatedHandlerCalculation(id).asResponse();
    }

    @PostMapping
    public final ResponseEntity<?> createHandler() {
        //return a 204 Response, containing the URI from getHandler, with {id} resolved to the id from your database (or wherever).
    }
}

Это будет доступно как HTTP-GET: /api/accounts/1 и HTTP-POST: /api/accounts, последний вернет URI для /api/accounts/2 (что можно получить с помощью HTTP-GET или обновить / изменить с помощью HTTP-PUT)

Чтобы разрешить этот URI, вы можете использовать отражение и оценить аннотации к соответствующему классу / методам, как это делает Джерси.

Весенний эквивалент может быть:

// Controller requestMapping
String controllerMapping = this.getClass().getAnnotation(RequestMapping.class).value()[0];

и

//Method requestMapping
String methodMapping = new Object(){}.getClass().getEnclosingMethod().getAnnotation(GetMapping.class).value()[0];

взято из Как получить значение сопоставления запросов в контроллере?

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