Java註解之@RequestParam
上節內容回顧:
1、針對@RequestMapping的學習,需要了解它的使用位置和功能,包含的方法。
位置用於類或方法之上,提供訪問路徑及引數的設定。另外包含的引數和方法有8中,name, value , path ,produces, consumes, method , headers, params.
針對每個引數的不同所起到的作用不同,詳細內容參考:@RequestMapping
2、@RequestParam學習記錄
@RequestParam也是一個介面,其中定義的介面方法value,name, required和defaultValue。
作用:將請求引數區資料對映到功能處理方法的引數上。
下面是該介面的原始碼。
2.1、原始碼:
package org.springframework.web.bind.annotation; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestParam { /** * Alias for {@link #name}. */ @AliasFor("name") String value() default ""; /** * The name of the request parameter to bind to. * @since 4.2 */ @AliasFor("value") String name() default ""; boolean required() default true; String defaultValue() default ValueConstants.DEFAULT_NONE; }
2.2、value() 和 name()
這兩個方法的作用是一樣的,和@RequestMapping中的valeu()和path()是一樣,知識起了一個別名方法。
方法的作用:表示引數的名字,即入參的請求引數名字。
如下是xiaocui資訊查詢方法,其中包含的引數均是用@RequestParam實現的,預設的方法是value.
@RequestMapping(value = "/xiaocui/info",method = RequestMethod.GET) @ResponseBody public void XiaoCuiInfoQuery(@RequestParam String name, @RequestParam Integer age, @RequestParam String school){ System.out.println("name:"+name+",age:"+age+",school:"+school); }
在前臺可以直接傳入下面的引數等:
<input type="text" name="name" />
<input type="text" name="age" />
注:springMVC在使用過程中會根據引數名字來注入,因此,在使用Value時必須保證名字一致,不然入會注入。
拓展:如果和前臺的引數不一致了,則處理方法如下所示:
@RequestMapping(value = "/xiaocui/info",method = RequestMethod.GET)
@ResponseBody
public void XiaoCuiInfoQuery(@RequestParam(name="xiaocuiname") String name, @RequestParam(name="xiaocuiage") Integer age, @RequestParam String school){
System.out.println("name:"+name+",age:"+age+",school:"+school);
}
在前臺需要傳入的引數如下:
<input type="text" name="xiaocuiname" />
<input type="text" name="xiaocuiage" />
2.3、required()
作用:要求前端配置的前端引數是否一定要傳。預設是true,表示請求中一定要有相應的引數,否則將報404錯誤碼;
如果設定為false,則在請求過程中可以忽略引數,不去考慮。
@RequestMapping(value = "/xiaocui/name",method = RequestMethod.GET)
@ResponseBody
public void XiaoCuiInfoQuery(@RequestParam(name="xiaocuiname",required=true) String name){
System.out.println("name:"+name);
}
上述程式碼表示請求需要引數的傳入。
另外,如果required設定為false,則預設為引數賦值為null。
2.4、defaultVale()
defaultValue:預設值,表示如果請求中沒有同名引數時的預設值,預設值可以是SpEL表示式,如“#{systemProperties['java.vm.version']}”。
方法呼叫的是常量值ValueConstants.DEFAULT_NONE.
檢視該常量的資訊如下:
public interface ValueConstants {
/**
* Constant defining a value for no default - as a replacement for
* {@code null} which we cannot use in annotation attributes.
* <p>This is an artificial arrangement of 16 unicode characters,
* with its sole purpose being to never match user-declared values.
* @see RequestParam#defaultValue()
* @see RequestHeader#defaultValue()
* @see CookieValue#defaultValue()
*/
String DEFAULT_NONE = "\n\t\t\n\t\t\n\uE000\uE001\uE002\n\t\t\t\t\n";
}
注:其唯一目的是永遠不匹配使用者宣告的值。
採用該方法後就不會有使用者匹配到該值。(小概率事件)