2013-10-04 24 views
12

Dlaczego Spring 3.2 odwzorowuje tylko mój logiczny boolean na podstawie tego, że requestparam ma wartość "0" lub "1"?Spring @RequestParam mapping Boolean oparty na 1 lub 0 zamiast prawdziwego lub fałszywego

@RequestParam(required= false, defaultValue = "false") Boolean preview 

Preview będzie tylko "true" gdy requestparam jest "?preview=1" co jest dziwne

chcę go mieć "?preview=true". Jak mogę to zrobić?

+0

Czy znasz sposób, w którym parametr żądania, który ma wartość domyślną i wymagany jest false, który może być całkowicie ignorowany w adresie URL, co oznacza, że ​​nie musimy niczego umieszczać w adresie URL dla tego parametru żądania. W twoim przykładzie 'podgląd' nie będzie nawet częścią adresu URL. –

Odpowiedz

8

Wiosna powinna być w stanie zinterpretować prawda, , tak i na jako true wartości logicznej ... sprawdź StringToBooleanConverter.

+0

Czy jest jakiś sposób, w którym wyłączyliśmy wymagane i zapewniamy wartość domyślną, a w adresie URL nie musimy nawet wspominać o parametrze żądania? –

+0

{{@RequestParam (defaultValue = "true") zgłoszenie boolowskie}} Powinno wystarczyć, aby rozwiązać twój problem. – varra

40

Myślę, że możemy potrzebować więcej szczegółów, aby skutecznie odpowiedzieć na twoje pytanie.

mam pracę Wiosna kod 3.2 wzdłuż linii:

@RequestMapping(value = "/foo/{id}", method = RequestMethod.GET) 
@ResponseBody 
public Foo getFoo(
    @PathVariable("id") String id, 
    @RequestParam(value="bar", required = false, defaultValue = "true") 
     boolean bar) 
{ 
    ... 
} 

Wiosna poprawnie interpretuje ?bar=true, ?bar=1 lub ?bar=yes jako prawdziwe, a ?bar=false, ?bar=0 lub ?bar=no jako fałszywe.

Wartości true/false i yes/no ignorują wielkość liter.

+0

Czy to również ma równeIlucoreCase? Mam na myśli to, czego można by się spodziewać, jeśli wyślę 'bar = TRUE',' bar = TrUe' lub 'bar = yES' ...? –

+0

Zgodnie z kodem kodu podanym przez Pavel poniżej, ignoruje on wielkość liter. – stenix