Parameter pengawal (Parameter)
Modul WebMVC bukan sahaja menjadikan pengawal penulisan sangat mudah, tetapi juga memproses parameter permintaan menjadi lebih mudah! WebMVC secara automatik akan menukar jenis data yang sepadan dengan parameter kaedah atau ahli kelas berdasarkan konfigurasi anotasi parameter kaedah pengawal atau ahli kelas yang melibatkan anotasi berikut:
Anotasi parameter asas
@RequestParam. : Ikat parameter dalam permintaan; parameter :
- nilai: nama parameter, jika tidak dinyatakan, nama pembolehubah kaedah akan digunakan secara lalai awalan: awalan nama parameter, lalai ialah ""
- Nilai lalai: nilai lalai bagi parameter yang ditentukan , lalai ialah ""; Contoh kod:
@Controller @RequestMapping("/demo") public class DemoController { @RequestMapping("/param") public IView testParam(@RequestParam String name, @RequestParam(defaultValue = "18") Integer age, @RequestParam(value = "name", prefix = "user") String username, @RequestHeader(defaultValue = "BASIC") String authType, @CookieVariable(defaultValue = "false") Boolean isLogin) { System.out.println("AuthType: " + authType); System.out.println("IsLogin: " + isLogin); return View.textView("Hi, " + name + ", UserName: " + username + ", Age: " + age); } }
Akses ujian URL melalui penyemak imbas:http://localhost:8080/demo/param?name=webmvc&user.name=ymper
Hasil pelaksanaan:
控制台输出: AuthType: BASIC IsLogin: false 浏览器输出: Hi, webmvc, UserName: ymper, Age: 18
nilai: nama parameter, jika tidak dinyatakan, nama pembolehubah parameter kaedah digunakan secara lalai; Melalui penyemak imbas:
@Controller @RequestMapping("/demo") public class DemoController { @RequestMapping("/path/{name}/{age}") public IView testPath(@PathVariable String name, @PathVariable(value = "age") Integer age, @RequestParam(prefix = "user") String sex) { return View.textView("Hi, " + name + ", Age: " + age + ", Sex: " + sex); } }
execution Result:
http://localhost:8080/demo/path/webmvc/20?user.sex=F
enote
: Pembolehubah parameter berasaskan laluan mestilah berterusan, seperti:Ralat :/path/{name}/age/{jantina}Correct:/path/{name}/ {age}@ModelBind: anotasi pengikat parameter objek nilaiparameter awalan parameter, parameter awalan x; lalai ialah "" ;Kod contoh:
Hi, webmvc, Age: 20, Sex: F
- Akses ujian URL melalui penyemak imbas:
public class DemoVO { @PathVariable private String name; @RequestParam private String sex; @RequestParam(prefix = "ext") private Integer age; // 省略Get和Set方法 } @Controller @RequestMapping("/demo") public class DemoController { @RequestMapping("/bind/{demo.name}") public IView testBind(@ModelBind(prefix = "demo") DemoVO vo) { String _str = "Hi, " + vo.getName() + ", Age: " + vo.getAge() + ", Sex: " + vo.getSex(); return View.textView(_str); } }
Julat nilai termasuk: JAVA, JS, HTML, XML, SQL, CSV, DEFAULT
Nilai lalai DEFAULT, yang melengkapkan pelepasan SQL dan HTML parameter_escape_order
设定是在控制器方法参数执行验证之前还是之后执行参数转义动作,参数取值范围为before
或after
,默认为after
dilangkau: Maklumkan operasi induk bagi escaping; kaedah atau parameter semasa akan diabaikan, dan lalainya adalah palsu; Contoh kod satu:http://localhost:8080/demo/bind/webmvc?demo.sex=F&demo.ext.age=20Akses ujian URL melalui penyemak imbas: Hi, webmvc, Age: 20, Sex: FHasil pelaksanaan: (Output konsol1)
@Controller @RequestMapping("/demo") @ParameterEscape public class DemoController { @RequestMapping("/escape") public IView testEscape(@RequestParam String content, @ParameterEscape(skiped = true) @RequestParam String desc) { System.out.println("Content: " + content); System.out.println("Desc: " + desc); return View.nullView(); } } // 或者:(两段代码执行结果相同) @Controller @RequestMapping("/demo") public class DemoController { @RequestMapping("/escape") @ParameterEscape public IView testEscape(@RequestParam String content, @ParameterEscape(skiped = true) @RequestParam String desc) { System.out.println("Content: " + content); System.out.println("Desc: " + desc); return View.nullView(); } }
http://localhost:8080/demo/escape?content=<p>content$<br><script>alert("hello");</script></p>&desc=<script>alert("hello");</script>
Hasil pelaksanaan: (Output konsol)
Content: <p>content$<br><script>alert("hello");</script></p> Desc: <script>alert("hello");</script>
: Apabila kedua-dua kelas pengawal dan kaedah mengisytiharkan anotasi @ParameterEscape, anotasi yang diisytiharkan pada kelas akan dianggap tidak sah; pengawal dan pengawal bukan tunggal:Contoh 2 penerangan:
Nota
- Walaupun kelas pengawal diisytiharkan dengan tetapan @ParameterEscape yang melangkaui kaedah melangkau dengan kaedah @ParameterEscape. Kandungan parameter kaedah yang diisytiharkan tidak terlepas, jadi kandungan kandungan parameter tidak terlepas
- Oleh kerana parameter desc mengisytiharkan anotasi @ParameterEscape, menunjukkan bahawa parameter perlu dilepaskan, kandungan parameter berjaya dilepaskan;
@Controller @RequestMapping("/demo") @ParameterEscape public class DemoController { @RequestMapping("/escape2") @ParameterEscape(skiped = true) public IView testEscape2(@RequestParam String content, @ParameterEscape @RequestParam String desc) { System.out.println("Content: " + content); System.out.println("Desc: " + desc); return View.nullView(); } }
http://localhost:8080/demo/escape2?content=<p>content$<br><script>alert("hello");</script></p>&desc=<script>alert("hello");</script>
Hasil pelaksanaan kod sampel ini:Content: <p>content$<br><script>alert("hello");</script></p> Desc: <script>alert("hello");</script>Nota: Dalam mod tunggal, modul WebMVC akan mengabaikan pemberian nilai kepada ahli kelas pengawal Ia juga disyorkan untuk tidak menggunakan pembolehubah ahli sebagai parameter dalam mod tunggal akibat yang tidak dijangka mungkin berlaku dalam persekitaran berbilang benang soalan! !