SpringMVC的部分註解

@Controller
標識Spring MVC Controller處理器,用來創建處理HTTP請求的對象;
@RequestMapping
@RequestMapping相關參數
1.value:指定url請求的實際地址,是@RequestMapping的默認值
@RequestMapping(“hello”)等同於 @RequestMapping(value=“hello”)
2.method:指定請求的method類型:GET、POST、PUT、DELETE
@RequestMapping(value=“hello”,method=RequestMethod.GET)表示只能接收get請求
RequestMethod是一個枚舉類

@RequestMapping(value = "/hello", method=RequestMethod.GET)
public String hello(){

    System.out.println("執行了hello方法");
    return "index";
}

3.params:表示請求中必須包含某些參數,否則無法調用該方法
@RequestMapping(value=“hello”,method=RequestMethod.GET,params={“name”,”id”})表示只能接收get請求且必須傳遞name和id這兩個參數
@RequestMapping(value=“hello”,method=RequestMethod.GET,params={“name”,”id=10”})表示只能接收get請求,且必須傳遞name和id這兩個參數,且id的值必須爲10

@RequestMapping(value = "/hello", method=RequestMethod.GET,params = {"name","id=10"})
public String hello(String name,String id){
    System.out.println(name);
    System.out.println(id);
    System.out.println("執行了hello方法");
    return "index";
}

關於參數綁定:在形參列表中,通過添加@RequestParam註解完成了HTTP請求參數與業務方法形參的映射

@RequestMapping(value = "/hello", method=RequestMethod.GET,params = {"name","id=10"})
public String hello(@RequestParam("name") String str, @RequestParam("id")int age){
    System.out.println(str);
    System.out.println(age);
    System.out.println("執行了hello方法");
    return "index";
}

上面代碼表示將請求的參數name和id分別賦給了形參str和age,同時自動完成了數據類型轉換,將“10”轉爲了int類型的10,再賦給age,這些工作都是由HandlerAdapter來完成的;

@CookieValue:映射cookie
SpringMVC通過映射可以直接在業務方法中獲取cookie的值

@RequestMapping("cookie")
public  String cookie(@CookieValue(value = "JSESSIONID") String seesionID){
    System.out.println(seesionID);
    return "index";
    
}

將客戶端cookie中的JSESSIONID的值賦值給形參sessionID

使用javaBean綁定參數
SpringMVC會根據請求參數名和javaBean屬性名進行自動匹配,自動爲對象填充屬性值,同時支持級聯屬性。(級聯屬性指對象之中有對象)
實體類:

import lombok.Data;
@Data
public class Address {
    String value;
}
import lombok.Data;
@Data
public class User {
    int id;
    String name;
    Address address;
}

handler:

@RequestMapping("/save")
public String arrayTest(User user){
    System.out.println(user);
    return  "index";
}

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/save" method="post">
        用戶id:<input type="text" name="id"/><br>
        用戶名:<input type="text" name="name"/><br>
        用戶地址:<input type="text" name="address.value"/><br>
        <input type="submit" value="註冊">
    </form>
</body>
</html>

jsp中的name=“id”,name=“name”,name="address.value"就會自動對應handler裏面的User對嚮往的id、name、address.value;

如果出現中文亂碼問題,只需在web.xml中添加Spring MVC自帶的過濾器即可
過濾器:

<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>/*編碼使用UTF-8*/
  </init-param>
</filter>
<filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>/*攔截*/
</filter-mapping>

@ResponseBody
表示Spring MVC 會直接將業務方法的返回值響應給客戶端,如果不加@ResposeBody註解,Spring MVC會將業務方法的返回值傳遞給哦DispatcherServlet,再由DispatcherServlet調用ViewResolver對返回值進行解析,映射到一個JSP資源;


@RequestMapping("/data")
@ResponseBody
public  String data(int id){
    return id+"";
    
}

請求地址爲:http://localhost:8080/hello/index?id=1,但是如果不給id傳值,會報錯,因爲不傳值時,id爲null,但基本數據類型不能爲null,所以報錯,爲解決此問題,使用包裝類;

上面一段代碼,如果地址欄輸入請求地址爲http://localhost:8080/hello/index?id=10,則就會在頁面上顯示10;如果將@ResponseBody去掉,若沒有10.jsp這個頁面,則會報錯;

@RequestParam
value=”num”:將HTTP請求中名爲num的參數賦給形參id
required:設置num是否爲必填項,true表示必填,false表示非必填,可省略
DefaultValue=“10”:如果HTTP請求中沒有怒罵參數,默認值爲10

@RequestMapping("/data")
public  String hh(@RequestParam(value = "num" ,required = false,defaultValue = "10") Integer id){
    return "index";

}

@RestController
表示該控制器會直接將業務方法的返回值響應給客戶端,不進行視圖解析;
@Controller:表示該控制器的每一個返回值都會交給視圖解析器進行解析,如果只需要將數據響應給客戶端,而不需要進行視圖解析,則需要在對應的業務方法定義處添加@ResponseBody

@Controller
public class handler {

    @RequestMapping("/data")
    @ResponseBody
    public  String data(int id){
        return id+"";

    }
}

等同於:

@RestController
public class handler {
    @RequestMapping("/data")
       public  String data(int id){
        return id+"";
    }
 }

視圖解析器配置:

 <!--視圖解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章