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"
@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
@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
@fegwegw: Okej, dzięki wielkie, po prostu myślałem że.wysylajac dwa obiekty będę w stanie złapać dwa obiekty osobno. Jak widać się nie da tak prosto jak myślałem :(
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"
Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
http://jsonlint.com/
I wklej cały exception.
@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
http://stackoverflow.com/questions/20837856/can-not-deserialize-instance-of-java-util-arraylist-out-of-start-object-token
Tu masz mniej więcej opisany problem.
http://www.leveluplunch.com/java/tutorials/014-post-json-to-spring-rest-webservice/ to powinno rozjaśnić trochę temat.