Spring REST @RequestMapping извлекается неправильно, если значение содержит ‘.’
проблема
См. Следующий пример Spring REST: если отправлен такой запрос, как «http://localhost:8080/site/google.com
», Spring возвращает «google». Похоже, Spring обрабатывает «.» Как расширение файла и извлекает половину значения параметра.
SiteController.java
package com.example.web.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/site") public class SiteController { @RequestMapping(value = "/{domain}", method = RequestMethod.GET) public String printWelcome(@PathVariable("domain") String domain, ModelMap model) { model.addAttribute("domain", domain); return "domain"; } }
Решение
Чтобы исправить это, сделайте так, чтобы@RequestMapping
поддерживал регулярное выражение, добавьте «.+
», это означает соответствие чему угодно. Теперь Spring вернет «google.com».
SiteController.java
package com.example.web.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/site") public class SiteController { @RequestMapping(value = "/{domain:.+}", method = RequestMethod.GET) public String printWelcome(@PathVariable("domain") String domain, ModelMap model) { model.addAttribute("domain", domain); return "domain"; } }