Spring throw Bad Request, если параметр метода недоступен в методе Controller - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу ограничить список разрешенных параметров запроса в моем контроллере, чтобы, если я получаю запрос с неопределенным параметром в контроллере, он должен вернуть неверный запрос , но он возвращает 200 OK.

Я думаю, что это должно быть исправлено на уровне платформы, но не на уровне контроллера. Я запутался в этом и не смог ничего найти в inte rnet

Например, у меня есть следующее определение контроллера:

@GetMapping("/Client")
public ResponseEntity<List<Client>> getAllClients(HttpServletRequest httpServletRequest,
            @RequestParam(value = McsConstants.PAGE_HEADER, required = false) Integer page,
            @RequestParam(value = McsConstants.SIZE_HEADER, required = false) Integer size) {...}

И действительный запрос будет

GET .../Client
GET .../Client?page=1
GET .../Client?size=10
GET .../Client?page=1&size=10

Как я могу проверить случай, когда у меня есть неопределенный параметр запроса, как показано ниже?

GET .../Client?someUndefinedParam=1

Дайте мне знать, пожалуйста, за любые идеи или ссылки

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Одним из способов справиться с этим может быть использование аннотации @RequestParam на аргументе Map или MultiValueMap.

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

РЕДАКТИРОВАТЬ: Ниже приведен пример для того же -

@RequestMapping(value = "/test", method = RequestMethod.GET)
public void testMethod(@RequestParam Map<String, String> allRequestParams) {
    if (!isValidParams(allRequestParams)) { 
         // isValidParams() will validate the map with a reference map containing all the expected params
         // throw BadRequestException here
    }
}

Надеюсь, это поможет!

0 голосов
/ 30 апреля 2020

позвольте мне поделиться своими знаниями, это может быть полезно для некоторых других сценариев ios

Если requestparam и переменная имеют одно и то же имя, вам не нужно указывать значение @RequestParam.

ниже i упомянул с примером кода. Пожалуйста, поделитесь своим мнением

@GetMapping("/Client")
public ResponseEntity<List<Client>> getAllClients(HttpServletRequest httpServletRequest,
        @RequestParam <Optional>Integer page,
        @RequestParam <Optional>Integer size) {
         //you can do ur logics 
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...