最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?MVC中的常用注解及用法小結(jié)

 更新時(shí)間:2024年02月21日 08:58:18   作者:zhanlongsiqu  
這篇文章主要介紹了Spring?MVC中的常用注解及其用法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

一、建立連接

@RequestMappering可以作用在類上(類注解)、也可以作用在方法上(方法注解)。
@RequestMappering后面的括號(hào)中:雙引號(hào)的值會(huì)賦值給value這個(gè)屬性。只有一個(gè)屬性且屬性名為value時(shí)這個(gè)屬性名可以省略不寫。
@RequestMappering默認(rèn)支持get/post請(qǐng)求,可以使用method屬性來(lái)限制請(qǐng)求方式。

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

二、接收請(qǐng)求

2.1請(qǐng)求中帶有一個(gè)參數(shù)

@RequestMapping("/r1")
public String r1(String name){
    return "接收到參數(shù) name:"+name;
}
@RequestMapping("/r2")
public String r2(Integer age){
    return "接收到參數(shù) age:"+age;
}

2.2請(qǐng)求中帶有多個(gè)參數(shù)

@RequestMapping("/r3")    
public String r3(String name,Integer age){//注意參數(shù)類型要寫Integer不要寫int,因?yàn)檎?qǐng)求中沒有傳參數(shù)時(shí)則傳的參數(shù)是null,int類型的變量不能接收null
    return "name:"+name+",age:"+age;    
}

2.3用對(duì)象接收請(qǐng)求中的參數(shù)

public class UserInfo {//假設(shè)代碼中定義了UserInfo類
    private int id;    
    private String name;    
    private Integer age;       
    public UserInfo() {    
    }    
    public UserInfo(int id, String name, Integer age) {        
        this.id = id;       
        this.name = name;       
        this.age = age;  
    }   
    public int getId() {        
        return id;    
    }   
   ...
}
@RequestMapping("/r4")    
public String r4(UserInfo user){        
    return user.toString();    
}

2.4對(duì)請(qǐng)求中的參數(shù)進(jìn)行重命名

從請(qǐng)求中獲取name參數(shù)的值并賦值給代碼中的username參數(shù)。@RequestParam注解里加required = false則表示這個(gè)注解修飾的參數(shù)可以不傳(否則這個(gè)注解修飾的參數(shù)一定要傳),不傳時(shí)這個(gè)參數(shù)的值為null。required默認(rèn)為true。

@RequestMapping("/r5")    
public String r5(@RequestParam(value = "name",required = false) String username, @RequestParam("age") Integer userage){        
    return "username:"+username+",age:"+userage;    
}

2.5請(qǐng)求參數(shù)中帶有數(shù)組

@RequestMapping("/r6")    
public String r6(String[] arr){        
    return Arrays.toString(arr)+",length:"+arr.length;    
}

2.6請(qǐng)求參數(shù)中帶有集合

默認(rèn)情況下,請(qǐng)求中參數(shù)名相同的多個(gè)值,是封裝到數(shù)組中的。如果要封裝到集合,要使?@RequestParam綁定參數(shù)關(guān)系。
以下為綁定參數(shù)關(guān)系的同時(shí)對(duì)參數(shù)中的集合名進(jìn)行重命名:

  @RequestMapping("/r7")
    public String r7(@RequestParam(value = "list", required = false) List<String> list1){
        if (list1!=null){
            return list1.toString()+",size:"+list1.size();
        }
        return "list為空";
    }

2.7json字符串和Java對(duì)象互轉(zhuǎn)

以下這種轉(zhuǎn)換方式:拿到j(luò)son字符串把這個(gè)json字符串轉(zhuǎn)換為java對(duì)象的時(shí)候,會(huì)調(diào)用java對(duì)象無(wú)參的構(gòu)造函數(shù)構(gòu)造成一個(gè)空的對(duì)象,再對(duì)字符串進(jìn)行解析對(duì)空對(duì)象的屬性進(jìn)行賦值。所以java對(duì)象所屬的類中如果我們自己寫了有參的構(gòu)造方法則要把無(wú)參的構(gòu)造方法加上。

public static void main(String[] args) throws JsonProcessingException {        ObjectMapper objectMapper = new ObjectMapper();        
    UserInfo userInfo = new UserInfo();          
    userInfo.setName("lingliang");          
    userInfo.setAge(16);        
    userInfo.setId(1);       
    //對(duì)象轉(zhuǎn)json        
    String s = objectMapper.writeValueAsString(userInfo);          
    System.out.println(s);          
    //json字符串轉(zhuǎn)成Java對(duì)象      
    UserInfo userInfo1 = objectMapper.readValue(s, UserInfo.class);  
    System.out.println(userInfo1);    
}

2.8前端傳遞json數(shù)據(jù)給后端、json數(shù)據(jù)在請(qǐng)求正文中、后端接收json數(shù)據(jù)

@RequestMapping("/r8")    
public String r8(@RequestBody UserInfo userInfo){        
    return userInfo.toString();    
}

2.9獲取url中的參數(shù)

@RequestMapping("/r9/{articleId}")    
public String r9(@PathVariable Integer articleId){        
    return "articleId:"+articleId;   
}

2.10獲取url中的參數(shù)并對(duì)參數(shù)進(jìn)行重命名

將url中的參數(shù)name重命名為userName:

@RequestMapping("/r10/{name}/{age}")    
public String r10(@PathVariable("name") String userName, @PathVariable Integer age){        
    return "name:"+userName+",age:"+age;    
}

2.11上傳文件

即獲取請(qǐng)求中的文件。@RequestPart這個(gè)注解不寫也行,這個(gè)注解可以對(duì)file進(jìn)行重命名。

@RequestMapping("/r11")    
public String r11(@RequestPart MultipartFile file) throws IOException {        
    String fileName = file.getOriginalFilename();        
    file.transferTo(new File("D:/temp/"+fileName));          
    return "獲取上傳文件: "+file.getOriginalFilename();    
}

三、獲取cookie和session

3.1傳統(tǒng)方式獲取cookie(可以獲取到所有的cookie)

@RequestMapping("/getCookie1")    
public String getCookie(HttpServletRequest request){        
    Cookie[] cookies = request.getCookies();
    //Arrays.stream(cookies).forEach(x -> System.out.println(x.getName()+":"+x.getValue()));        
    if (cookies!=null){            
        for (Cookie c: cookies){                
            System.out.println(c.getName()+":"+c.getValue());         
        }           
         return "獲取Cookie成功";      
    }          
    return "Cookie 為空";    
}

3.2簡(jiǎn)潔方式獲取cookie(可以獲取到指定的cookie)

@RequestMapping("/getCookie2")    
public String getCookie2(@CookieValue("byte") String byte){   
    return "byte:" + byte;    
}

3.3傳統(tǒng)方式設(shè)置session和獲取session

@RequestMapping("/setSession")
public String setSession(HttpServletRequest request){
    HttpSession session = request.getSession();
    session.setAttribute("userName","zhangsan");
    return "設(shè)置Session成功";
}
@RequestMapping("/getSession1")
public String getSession(HttpServletRequest request){
    HttpSession session = request.getSession();
    String userName = (String)session.getAttribute("userName");
    return "登錄用戶:"+ userName;
}

3.4簡(jiǎn)潔方式獲取session

簡(jiǎn)潔方式1獲取session:

@RequestMapping("/getSession2")
public String getSession(HttpSession session){//如果后端還沒有session則HttpSession session會(huì)幫我們創(chuàng)建一個(gè)session,只是這個(gè)session里面沒有內(nèi)容。這預(yù)防了空指針異常的出現(xiàn)。
    String userName = (String)session.getAttribute("userName");
    return "登錄用戶:" + userName;
}

簡(jiǎn)潔方式2獲取session:

@RequestMapping("/getSession3")
public String getSession(@SessionAttribute(value = "userName", required = false) String userName){
    return "登錄用戶:" + userName;
}

四、獲取header

4.1傳統(tǒng)方式獲取header,可以獲取到全部header

@RequestMapping("/getHeader")    
public String getHeader(HttpServletRequest request){        
    String userAgent = request.getHeader("User-Agent");        
    return "userAgent:"+userAgent;    
}

4.2簡(jiǎn)潔方式獲取header

這種方式想獲取到全部header則參數(shù)聲明要寫得非常長(zhǎng)。

@RequestMapping("/getHeader2")
public String getHeader2(@RequestHeader("User-Agent") String userAgent){
    return "userAgent:"+userAgent;
}

五、返回響應(yīng)

(1)返回靜態(tài)頁(yè)面。
(2)返回?cái)?shù)據(jù)。
(3)返回HTML片段。
(4)返回json。
(5)設(shè)置狀態(tài)碼、編碼方式、header。

元注解(即可以注解到其它注解的注解):
1)@Target({ElementType}.TYPE):表示注解的使用范圍,TYPE表示注解的使用范圍是類。
2)@Retention(RetentionPolicy.RUNTIME):表示注解的生命周期。
3)@Documented。

@RestController=@Controller+@ResponseBody。
@Controller是在告訴Spring,Spring要幫我們管理哪些程序,用@Controller修飾則默認(rèn)返回的是頁(yè)面。
@ResponseBody表示返回?cái)?shù)據(jù),其既可以修飾類又可以修飾方法,修飾類表示該類內(nèi)的所有方法返回的都是數(shù)據(jù),修飾方法表示該方法返回的是數(shù)據(jù)。

@Controller
//@RestController
@RequestMapping("/return")
public class ReturnController {
    @RequestMapping("/r1")
    public String r1(){
        return "/index.html";//返回靜態(tài)頁(yè)面
    }
    @ResponseBody
    @RequestMapping("/r2")
    public String r2(){
        return "hello, spring";//返回?cái)?shù)據(jù)
    }
    @ResponseBody
    @RequestMapping("/r3")
    public String r3(){
        return "<h1>我是返回的html片段</h1>";//返回html片段
    }
    @ResponseBody
    @RequestMapping("/r4")
    public UserInfo r4(){
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setName("lingliang");
        userInfo.setAge(16);
        return userInfo;//返回json。當(dāng)方法返回值類型為對(duì)象的時(shí)候,Spring會(huì)把響應(yīng)的Content-Type自動(dòng)設(shè)置為application/json。當(dāng)返回的是數(shù)據(jù),方法返回值類型為String的時(shí)候,默認(rèn)情況下,Spring會(huì)把響應(yīng)的Content-Type自動(dòng)設(shè)置為text/html。
    }
    @ResponseBody
    @RequestMapping("/r5")
    public Map<String,String> r5(){
        HashMap map = new HashMap();
        map.put("k1","v1");
        map.put("k2","v2");
        return map;//Spring會(huì)把響應(yīng)的Content-Type自動(dòng)設(shè)置為application/json。
    }
    @RequestMapping("/r6")
    public String r6(){
        return "/a.js";//Spring會(huì)把響應(yīng)的Content-Type自動(dòng)設(shè)置為application/javascript。
    }
    @RequestMapping("/r7")
    public String r7(){
        return "/b.css";//Spring會(huì)把響應(yīng)的Content-Type自動(dòng)設(shè)置為text/css。
    }
    @ResponseBody
    @RequestMapping("/r8")
    public String r8(HttpServletResponse response){
        response.setStatus(401);
        return "設(shè)置狀態(tài)碼成功";//設(shè)置狀態(tài)碼。狀態(tài)碼不影響界面的展示。
    }
    @ResponseBody
    //@RequestMapping("/r9")
    @RequestMapping(value = "/r9", produces = "application/json; charset=utf8")//設(shè)置響應(yīng)的Content-Type,因?yàn)楫?dāng)返回的是數(shù)據(jù),方法返回值類型為String的時(shí)候,默認(rèn)情況下,Spring會(huì)把響應(yīng)的Content-Type自動(dòng)設(shè)置為text/html。
    public String r9(){
        return "{\"OK\":1}";//返回的是一個(gè)json數(shù)據(jù)。
    }
    @ResponseBody
    @RequestMapping(value = "/r10")
    public String r10(HttpServletResponse response){
      response.setHeader("myHeader","myHeaderValue");//設(shè)置自定義的header。
        return "設(shè)置header成功";
    }
}

到此這篇關(guān)于Spring MVC中的常用注解及其用法的文章就介紹到這了,更多相關(guān)Spring MVC常用注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java動(dòng)態(tài)初始化數(shù)組,元素默認(rèn)值規(guī)則詳解

    Java動(dòng)態(tài)初始化數(shù)組,元素默認(rèn)值規(guī)則詳解

    動(dòng)態(tài)初始化數(shù)組涉及先定義數(shù)組長(zhǎng)度,后填充具體數(shù)據(jù),適用于數(shù)據(jù)量已知但具體值未定的情況,這種初始化方式允許程序運(yùn)行過程中賦值,并會(huì)根據(jù)數(shù)據(jù)類型設(shè)定默認(rèn)值,如整型為0,字符串為null,動(dòng)態(tài)初始化與靜態(tài)初始化格式不能混用
    2024-10-10
  • 解析java中的error該不該捕獲

    解析java中的error該不該捕獲

    這篇文章主要介紹了java中的error該不該捕獲,需要的朋友可以參考下
    2014-02-02
  • Java讀取resources中資源文件路徑以及jar中文件無(wú)法讀取的解決

    Java讀取resources中資源文件路徑以及jar中文件無(wú)法讀取的解決

    這篇文章主要介紹了Java讀取resources中資源文件路徑以及jar中文件無(wú)法讀取的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 為spring get請(qǐng)求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰)

    為spring get請(qǐng)求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰)

    這篇文章主要介紹了為spring get請(qǐng)求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-09-09
  • springboot 2.0 mybatis mapper-locations掃描多個(gè)路徑的實(shí)現(xiàn)

    springboot 2.0 mybatis mapper-locations掃描多個(gè)路徑的實(shí)現(xiàn)

    這篇文章主要介紹了springboot 2.0 mybatis mapper-locations掃描多個(gè)路徑的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)

    Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)

    這篇文章主要介紹了Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-12-12
  • springboot調(diào)用python文件的詳細(xì)方案

    springboot調(diào)用python文件的詳細(xì)方案

    這篇文章主要為大家詳細(xì)介紹了springboot調(diào)用python文件的詳細(xì)方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法

    mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法

    這篇文章主要介紹了mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 最新評(píng)論

    师宗县| 和硕县| 郴州市| 胶南市| 曲麻莱县| 南昌县| 祁东县| 无棣县| 句容市| 措勤县| 玉山县| 竹溪县| 嵩明县| 江达县| 长宁县| 德阳市| 松滋市| 栾川县| 西青区| 天峻县| 潼南县| 金溪县| 固镇县| 讷河市| 深水埗区| 青岛市| 海淀区| 广南县| 西充县| 嘉祥县| 威海市| 宁阳县| 左权县| 永仁县| 庐江县| 隆尧县| 会泽县| 浦江县| 五家渠市| 台北县| 华安县|