#java
#java
Вопрос:
Я не уверен, как @RequestMapping
это работает, и не могу это проверить, но у меня есть код, и мне нужно понять, чтобы что-то устранить.
Если запрос URL /view/game1
-адреса и в строке String testString
{service}
, "service"
переменная and уже оба расширены до /view/game1, request, game1, String.class
? Например, он расширяется во @RequestMapping
время, а затем также расширяется во testString
время инициализации?
Также на каком этапе происходит расширение? Тогда есть @RequestMapping
testString
и MyClass service = MyClass.getName(testString)
.
@RequestMapping("/view/{service}")
public ServiceResponse TESTService(HttpServletRequest request, HttpServletResponse response)
{
String testString = bindTestVariable("/view/{service}", request, "service", String.class);
MyClass service = MyClass.getName(testString);
return service;
}
Ответ №1:
В этом коде не происходит никакого «расширения». Существует «извлечение» (или «синтаксический анализ») части пути URL, что происходит при bindTestVariable()
вызове метода.
Однако вы должны позволить Spring сделать это, используя @PathVariable
.
Кроме того, соглашение об именовании Java предусматривает, что имена методов должны начинаться со строчной буквы.
@GetMapping("/view/{service}")
public ServiceResponse testService(@PathVariable("service") String service)
{
return MyClass.getName(service);
}
Комментарии:
1. итак, когда вызывается bindTestVariable, первый аргумент
"/view/{service}"
становится"/view/game1"
правильным? Я имеюgame1
в виду, что это из URL, а не из какого-либо кода. Это то, что я пытаюсь выяснить, потому что по какой-то причине класс возвращает пустую строку, и, возможно, это может быть какой-то другой класс, но я должен был понять это, прежде чем проверять другие вещи2. Также как насчет второго аргумента
"service"
? Извлекается ли он во время bindTestVariable()?3.@anon Нет,
"/view/{service}"
не становится"/view/game1"
, во всяком случае, наоборот."/view/game1"
Путь извлекается изrequest
, затем сопоставляется с"/view/{service}"
, что означает, чтоservice = "game1"
. ПосколькуbindTestVariable()
было сказано вернуть значениеservice
, оно возвращается"game1"
. С помощью Spring@PathVariable
Spring выполнит то же сопоставление и вызовет ваш метод в"game1"
качестве значения параметра.4. Итак, третий аргумент «service» — это просто указать, что возвращать? правильно? Фактическая функция называется «bindPathVariable ()», хотя я подумал, что переименовал бы ее, предполагая, что это что-то личное, хотя, похоже, это как-то связано
@PathVariable
.