Разница между @RequestParam и @PathVariable в Spring

Spring

Золотые самородки сказали: я не могу заранее связать кусочки того, что происходит сейчас, и только когда я оглянусь в будущее, я пойму, как эти кусочки связаны. Итак, я должен верить:То, что происходит сейчас, будет связано воедино в будущем.Может быть, я не знаю прямо сейчас, хорошо ли это или пустая трата времени, чтобы написать это... но, оглядываясь назад в будущее, я буду знать, что оно того стоило.Потому что каждый процесс становится тем, кем ты являешься сейчас~

Оглядываясь назад, мы обычно используем две аннотации для получения параметров, чтобы различить связь и разницу между ними, нам еще нужно найти материалы, проверить самим, а затем систематизировать и закрепить впечатление. Так@RequestParamа также@PathVariableРазница между ними в том, что они оба могут использоваться для извлечения значения из URI запроса, но они несколько отличаются.

Параметры запроса и подклассы URL

  • для@RequestParamИзвлечь значение из строки запроса
@GetMapping("/pig")
public String getPigByIds(@RequestParam String ids) {
    return "IDs: " + ids;
}

Просмотр через браузерhttp://localhost:8080/pig?ids=10085Полученное значение идентификатора: 10085]

  • для@PathVariableИзвлечь значение пути из URI
@GetMapping("/pig/{id}")
public String getPigById(@PathVariable String id) {
    return "ID: " + id;
}

Просмотр через браузерhttp://localhost:8080/pig/10085Полученное значение идентификатора: 10085

Кодировка и точное значение

для@PathVariableИзвлеките базовое значение из URI, не кодируя его.

http://localhost:8080/pig/he+llo
----
ID: he+llo

Однако для@RequestParamИзвлечение значений из строк запроса требует кодирования. Параметр декодируется URL:

http://localhost:8080/pig?id=he+llo
----
ID: he llo

необязательное значение

несмотря ни на что@RequestParamа также@PathVariableНеобязательный.

Начиная с Spring 4.3.3, мы можем сделать @PathVariable необязательным с необходимыми свойствами:

@GetMapping({"/mypig/optional", "/mypig/optional/{ids}"})

public String getPigByIds(@PathVariable(required = false) String ids){
    return "IDs: " + ids;
}

Выполните следующее:

http://localhost:8080/mypig/optional/hello
----
ID: hello

или

http://localhost:8080/mypig/optional
----
ID: null

Для @RequestParam мы также можем использовать обязательный атрибут.

УведомлениеДелая @PathVariable необязательным, мы должны проявлять особую осторожность, чтобы избежать конфликтов путей.
добавить заголовок класса@RestControllerопущен в методе@ResponseBody

В заключение

Фундамент не крепкий, земля трясется, записывайте.

Ссылаться на

gitee-pig

Spring Основы MVC 2

Spring аннотация @RequestParam

Spring @RequestParam против аннотации @PathVariable