Bagaimana Anda menerima parameter url dengan pemetaan pengontrol pegas

102

Masalah ini sepertinya sepele, tetapi saya tidak bisa membuatnya berfungsi dengan baik. Saya memanggil pemetaan pengontrol Spring saya dengan jquery ajax. Nilai untuk someAttr selalu berupa string kosong terlepas dari nilai di url. Tolong bantu saya menentukan alasannya.

-URL dipanggil

http://localhost:8080/sitename/controllerLevelMapping/1?someAttr=6

Pemetaan -Controller

@RequestMapping(value={"/{someID}"}, method=RequestMethod.GET)
public @ResponseBody int getAttr(@PathVariable(value="someID") final String id, 
        @ModelAttribute(value="someAttr") String someAttr) {
    //I hit some code here but the value for the ModelAttribute 'someAttr' is empty string.  The value for id is correctly set to "1".
}
pembuat kode
sumber

Jawaban:

167

Anda harus menggunakan @RequestParamalih-alih @ModelAttribute, mis

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 @RequestParam String someAttr) {
}

Anda bahkan dapat menghilangkan @RequestParamsemuanya jika Anda memilih, dan Spring akan berasumsi bahwa itu adalah:

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 String someAttr) {
}
skaffman
sumber
Jika ada orang lain yang juga mencari dokumentasi resminya @RequestParam, ini dia: docs.spring.io/spring/docs/current/javadoc-api/org/…
tobias
23

Anda memiliki banyak varian untuk digunakan @RequestParamdengan elemen opsional tambahan, mis

@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr

Jika Anda tidak memasukkan required = false - param akan dibutuhkan secara default.

defaultValue = "someValue" - nilai default untuk digunakan sebagai fallback ketika parameter permintaan tidak disediakan atau memiliki nilai kosong.

Jika parameter request dan method sama - Anda tidak perlu value = "someAttr"

Optio
sumber