<SpringMvc>入門二 註解
1.RequestMapping
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; @AliasFor("path") String[] value() default {}; @AliasFor("value") String[] path() default {}; RequestMethod[] method()default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
可以看出requestMapping可以作用在類和方法上
1.value和path是一樣的,並且預設值就是路徑,下面是測試,請求成功
<a href="/hello/sayHello" >入門程式</a>
2.method,規定了該方法的請求型別,如果寫了,前端的請求型別一致才能訪問到該方法
如果不寫,則根據前端自動適應
public enum RequestMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; private RequestMethod() { } }
此時還是使用get方法進行請求,但是設定了該方法的訪問為post,則會報錯405
3.params:意思是前端必須傳遞一個引數過來
第一種情況:
例如:
如果使用
<a href="/hello/sayHello">入門程式</a>
則會報錯
所以應該修改為帶有username的引數
<a href="/hello/sayHello?username=hehe" >入門程式</a>
第二種情況:
規定了必須傳遞username=haha
我們傳遞一個username=hehe
<a href="/hello/sayHello?username=hehe" >入門程式</a>
依然會報400的錯誤;所以需要傳遞username=haha
加入我們傳入多個引數呢?
<a href="/hello/sayHello?username=haha&pwd=123" >入門程式</a>
這樣也是可以的,所以只要帶了 params 裡應該有的引數,就可以訪問成功。
4.headers:瀏覽器的請求頭裡必須帶哪些資訊,才可以請求到
如果設定了其他頭資訊,普通的瀏覽器訪問就會報錯
5.consumers和produces
consumers:指定請求提交內容的型別(Content-Type),例如application/json,text/html等
例如我們希望前臺傳遞過來是applicaton/json資料
但是我們用get請求,傳遞的引數型別是text/html
則會出現415的報錯
使用postman傳送application/json格式的資料去訪問,則訪問成功
producers:可以指定返回值的型別及其編碼,例如
但是必須要和@ResponseBody
註解一起使用才可以,不加@ResponseBody
註解相當於按照和返回String同名jsp頁面解析自然就會報錯。
如果返過來,不加produces屬性,只有@ResponseBody註解的話也是沒有問題的,只是在瀏覽器中直接訪問的時候有區別:
情況1:
情況2:
總的來說produces有兩個好處:一個是瀏覽器檢視方便(json自動格式化,帶搜尋),另一個可以防止中文亂碼。