Обязательная карта - PullRequest
       28

Обязательная карта

0 голосов
/ 30 октября 2019

В методах контроллера, если параметр метода равен

 @PathVariable Map<String, String> 

, то карта заполняется всеми именами и значениями переменных пути. Это правда?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 30 октября 2019

Карта заполняется всеми именами и значениями переменных пути. Это правда?

Вы всегда можете попробовать это. Короче говоря, ответ да . Из документации @PathVariable:

Аннотация, которая указывает, что параметр метода должен быть связан с переменной шаблона URI. Поддерживается для RequestMapping аннотированных методов-обработчиков.

Если параметр метода равен Map<String, String>, то карта заполняется всеми именами и значениями переменных пути.

Рассмотрим следующий метод контроллера:

@GetMapping("/{param1}/{param2}")
public ResponseEntity<Void> get(@PathVariable Map<String, String> values) {
    System.out.println(values);
    return ResponseEntity.ok().build();
}

Для запроса, такого как:

GET /foo/bar HTTP/1.1
Host: example.org

Будет напечатано:

{param1=foo, param2=bar}
1 голос
/ 30 октября 2019

@ PathVariable - это аннотация Spring, которая указывает, что параметр метода должен быть связан с переменной шаблона URI. Если параметром метода является Карта, тогда карта заполняется всеми именами и значениями переменных пути.

Пример:

@ResponseStatus(value = HttpStatus.OK)
@GetMapping(value = "/book/{author}/{title}")
public void process3(@PathVariable Map<String, String> vals) {

  logger.info("{}: {}", vals.get("author"), vals.get("title"));

}
1 голос
/ 30 октября 2019

@PathVariable предназначен для дифференциации конечных точек и не должен использоваться для отправки собранных данных в контроллер, например, предположим, что одна из моих конечных точек имеет значение /list/{vehicletype}/{fuel} Здесь {vehicletype} и {fuel} являются переменными пути.

Теперь, если я использую автомобиль в качестве типа транспортного средства и бензин в качестве топлива, моя конечная точка будет /list/car/petrol, чтобы получить список всех автомобилей, работающих на бензине. Также я могу передать велосипед как тип транспортного средства и электрический в качестве топлива, чтобы перечислить все велосипеды, которые работают наэлектричество. Моя конечная точка состоит в том, что такое условие будет /list/bike/electric

Таким образом, вы можете видеть, что эта же конечная точка становится динамической с помощью переменных пути. Также как переменная пути использует данные в URL браузера, поэтому она будет подавлена ​​1028 символами.

Если вам нужно отправить данные в контроллер, используйте вместо этого @RequestBody. Если вы хотите проверить его на пустоту для проверки данных, внедрите свой собственный валидатор и используйте @Valid аннотация

...