RequestMapping: как получить доступ к значению «method», используемому для конечной точки отдыха - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть конечная точка контроллера Spring Boot REST, которая принимает запросы GET и POST:

@RequestMapping(
        value="/users",
        method= {RequestMethod.GET, RequestMethod.POST},
        headers= {"content-type=application/json"}
        )
public ResponseEntity<List<User>> getUsers() {
    if(/*Method is GET*/) {
        System.out.println("This is a GET request response.");
    } else if( /*Method is POST*/) {
        System.out.println("This is a POST request response.");
    }
}

Если эта конечная точка получит запрос GET, я бы хотел, чтобы контроллер выполнил что-то в соответствующем операторе if. тогда как, если конечная точка получает запрос POST, я бы хотел, чтобы контроллер предпринял другие действия.

Как извлечь эту информацию из контроллера покоя? Я бы предпочел не разбивать эту общую конечную точку на два разных метода. Это кажется достаточно простым, я просто не могу найти на нем никаких документов.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Правильный подход будет состоять в том, чтобы сопоставить два отдельных метода GET и POST, но если вы настроены на такой подход, вы можете получить HTTP-глагол запроса, обратившись к HttpServletRequest следующим образом:

@RequestMapping(
    value="/users",
    method= {RequestMethod.GET, RequestMethod.POST},
    headers= {"content-type=application/json"}
    )
public ResponseEntity<List<User>> getUsers(final HttpServletRequest request) {
    if(request.getMethod().equals("GET")) {
        System.out.println("This is a GET request response.");
    } else if(request.getMethod().equals("POST")) {
        System.out.println("This is a POST request response.");
    }
}

Вам не нужно будет менять свой код вызова, так как HttpServletRequest автоматически передается через

0 голосов
/ 04 ноября 2018

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

GET

@RequestMapping(
        value="/users",
        method= RequestMethod.GET,
        headers= {"content-type=application/json"}
        )
public ResponseEntity<List<User>> getUsers() {
    System.out.println("This is a GET request response.");
}

POST

@RequestMapping(
        value="/users",
        method= RequestMethod.POST,
        headers= {"content-type=application/json"}
        )
public ResponseEntity<List<User>> postUsers() {
    System.out.println("This is a POST request response.");
}

Таким образом, вы не добавляете дополнительные издержки, и код выглядит более чистым.

...