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".
}

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) {
}

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"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.