Spring REST @RequestMapping-Extrakt falsch, wenn der Wert "." Enthält
Problem
Siehe folgendes Spring REST-Beispiel: Wenn eine Anforderung wie "http://localhost:8080/site/google.com
" gesendet wird, gibt Spring "google" zurück. Angenommen, Spring behandelt "." Als Dateierweiterung und extrahiert die Hälfte des Parameterwerts.
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"; } }
Lösung
Um dies zu beheben, unterstützt make@RequestMapping
reguläre Ausdrücke. Fügen Sie „.+
“ hinzu. Dies bedeutet, dass alles übereinstimmt. Jetzt gibt Spring "google.com" zurück.
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"; } }