Wpis z mikrobloga

#naukaprogramowania #java #spring #javascript

W jaki sposób wysłać JSowy array tak, by spring mvc go zobaczył w @RequestParam? Próbowałem już na wszystkie sposoby, żaden nie działa ;/
Po stronie JSa mam:

$.ajax({
url: "api/board/set/",
method: "POST",
data: {fields: fields} //fields to array booleanów
})

Po stronie Springa ("api/board/" jest nad klasą, zresztą logi z Trace pokazują że metodę znajduje, tylko parametrów nie potrafi dopasować)

@RequestMapping(value = "set", method = RequestMethod.POST)
public HttpEntity setBoard(@RequestParam() Boolean[] fields) {

Próbowałem @RequestParam("fields"), @RequestParam("fields[]"), List, Boolean[], Object, @RequestBody Board (gdzie board to prowizoryczny wrapper arraya booleanów), nic nie działa.
Próbowałem po stronie JS: stringify wszystko i contentType app/json, stringify sam array fields (z headerem contentType: app/json i bez), bez konwertowania, wszystkie kombinacje, nie działa :(

Cały czas 400 albo w skrajnych przypadkach gdy chcę łapać @RequestBody a wysyłam bez sparsowania do JSONa 415.
edit: zapomniałem, a w sumie najważniejsze xD response.status(): "Required Boolean[] parameter 'fields' is not present"
  • 18
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@fegwegw: jedynie jak mogę łapać w tym momencie to Map, gdzie String to nazwa parametru a Boolean[] to ten array, ale to głupie, bo chcę poza arrayem Booleanów chcę dać np drugi parametr który jest intem. Mógłbym generyki, ale to chyba głupie :D
  • Odpowiedz
@chuuck: tak jest teraz, muszę łapać Map
@fegwegw: @chuuck: Nie ma mnie już przy kompie, ale json wygląda tak
{"fields": [false,true,false, false], "width": 2}
Pisze z pamieci wiec ten może mieć jakieś błędy, ale ten generowany i wysyłany sprawdzałem na jsonlint, jest poprawny. A w uproszczonym przykładzie na którym testuje jest po prostu
{"fields": [false,true,false, false]}

Teraz moim problemem jest to, że RequestBody wrapuje tego jsona
  • Odpowiedz