1. 程式人生 > ><SpringMvc>入門二 註解

<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自動格式化,帶搜尋),另一個可以防止中文亂碼。