Spring REST @RequestMapping-Extrakt falsch, wenn der Wert ″

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";

    }

}