Czy w Spring 3.0 mogę mieć opcjonalną zmienną ścieżki?
Na przykład
@RequestMapping(value = "/json/{type}", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
HttpServletRequest req,
@PathVariable String type,
@RequestParam("track") String track) {
return new TestBean();
}
Tutaj chciałbym /json/abc
lub /json
wywołać tę samą metodę.
Jedno oczywiste obejście deklaruje się type
jako parametr żądania:
@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
HttpServletRequest req,
@RequestParam(value = "type", required = false) String type,
@RequestParam("track") String track) {
return new TestBean();
}
a potem /json?type=abc&track=aa
lub /json?track=rr
będzie działać
@RequestMapping
z dwiema wartościami jak na: stackoverflow.com/questions/17821731/...@PathVariable
do@RequestParam
Jeśli używasz wiosny 4.1 i Java 8 można użyć
java.util.Optional
która jest obsługiwana w@RequestParam
,@PathVariable
,@RequestHeader
a@MatrixVariable
w Spring MVC -źródło
"/json/{type}"
i nie ma typu, nie zostanie trafiony (jak sugeruje moja łączona odpowiedź), ale tutaj maszvalue = {"/json/{type}", "/json" }
. Więc jeśli którykolwiek pasuje, metoda kontrolera zostanie trafiona.@PathVariable(required = false)
i uzyskać wartość null, jeśli zmienna nie jest obecna.Nie wiadomo, czy można wstrzyknąć mapę zmiennych ścieżki za pomocą adnotacji @PathVariable. Nie jestem pewien, czy ta funkcja jest dostępna w Spring 3.0, czy została dodana później, ale oto inny sposób rozwiązania tego przykładu:
źródło
Możesz użyć:
dla opcjonalnych parametrów zamiast pathVariable
źródło
Przykłady Spring 5 / Spring Boot 2:
bloking
reaktywny
źródło
Uproszczony przykład komentarza Nicolai Ehmanna i odpowiedzi wildloopa (działa ze Spring 4.3.3+), w zasadzie możesz
required = false
teraz użyć :źródło
Sprawdź tę Spring 3 WebMVC - Opcjonalne zmienne ścieżki . Pokazuje artykuł dotyczący rozszerzenia AntPathMatcher w celu włączenia opcjonalnych zmiennych ścieżki i może być pomocny. Wszystkie podziękowania dla Sebastiana Herolda za opublikowanie artykułu.
źródło
Oto odpowiedź prosto ze strony referencyjnej baeldung: - https://www.baeldung.com/spring-optional-path-variables
źródło
źródło