/ / Какъв е смисълът на {id:. +} В пролетен метод за обработка на заявки за MVC? - пролет, пролет-mvc

Какъв е смисълът на {id:. +} В прозореца MVC за обработка на заявки? - пролет, пролет-мвч

Попаднах на метод в контролера. Какъв е този идентификатор:. + ??

@RequestMapping(value="/index/{endpoint}/{type}/{id:.+}", method=RequestMethod.POST, consumes=kContentType, produces=kProducesType)
@ResponseBody
public String indexData(@PathVariable(value="endpoint") String endpoint, @PathVariable(value="type") String type, @PathVariable(value="id") String id, @RequestBody String body, HttpServletRequest request) {
logger.debug("In web controller for endpoint " + endpoint);
return indexController.indexData(endpoint, type, id, body,  getSecurityContextProvider(request));
}

Отговори:

20 за отговор № 1

Синтаксисът на променлива на пътя в пружинен MVC контролер на заявка е {variable_name:regular_expression}, По желание можете да пропуснете регулярния израз, което води до това, което виждате по-често, {id}.

И така, за пример /index/{endpoint}/{type}/{id:.+} името на променливата е id и редовният израз е .+ (вижте по-долу препратка към пролетни документи).

Регулярният израз .+ заявява „съвпадат с метахарактера . един или повече пъти "." Метахарактерът "." представлява всеки символ, включително бялото пространство (въпреки че някои реализации няма да съответстват на нови редове). Вижте http://en.wikipedia.org/wiki/Regular_expression

Редовният израз се използва, за да помогнеSpring определете стойността на променливата, защото можете да имате сложни имена на променливи или може да има друга важна информация в края на пътя, която иначе би се всмукала в стойността на променливата, ако Spring просто каза „отидете до края на пътя“ ( напр. разширения на имена на файлове или променливи на пътя).

Възможно е в твоя пример да се посочи идентификаторътпроменлива може да съдържа специални символи, които в противен случай биха причинили Spring да прекрати променливата преждевременно. Преди се опитвах да използвам име на файл, което съдържа разширение на файла (foobar.jpg). Пролетта ще върне само "foobar" частта на променливата, защото Spring предполагаше, че искам тя да прекрати стойността на променливата при разделителя за период. Така че, в този случай, за да сте сигурни, че „id“ съвпада с пълната стойност, вие поставяте регекс, който казва на Spring да продължи напред и да съвпадне всичко между последния преден наклонен черен край и края на пътя. Пролетта MVC @PathVariable става пресечена

Ето откъса от пролетните документи, който се занимава със сложно съвпадение на променливи:

Понякога се нуждаете от повече точност при дефиниране на променливи на URI шаблон. Помислете за URL адреса "/spring-web/spring-web-3.0.5.jar". Как го разграждате на няколко части?

Анотацията @RequestMapping поддържа използванетона регулярни изрази в променливи на шаблон URI. Синтаксисът е {varName: regex}, където първата част определя името на променливата, а втората - регулярния израз. "

Ето техния (доста сложен) пример:

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}{extension:\.[a-z]+}")
public void handle(@PathVariable String version, @PathVariable String extension) {
// ...
}

Източник: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html

Примерът, който те предоставят, показва как изпълнявате сложни картографиране от заявки към параметри на метода на контролера, които не бихте могли да използвате, без да използвате редовен израз.