欧美日韩国产一区,亚洲一区视频,色综合久久久久,私密按摩师舌头伸进去了,99re6这里只有精品,夜夜性日日交xxx性hd

java框架(2.1)@Controller和@RequestMapping注解

  • • 發表于 8年前
  • • 作者 大妖怪
  • • 2587 人瀏覽
  • • 1 條評論
  • • 最后編輯時間 8年前
  • • 來自 [技 術]

原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處

上章講到了框架的搭建,在搭建框架的過程中我們用到了兩個注解,一個是@Controller,另一個是@RequestMapping,其中@Controller用來標記控制器,@RequestMapping用來映射地址,下面來詳細講講這兩個注解的用法。

  • @Controller:
    @Controller注解只能標注在java類上主要是用于將普通的java類標記為控制器讓SpringMVC可以掃描到。講到這個注解,不得不講一下一個和他很像的注解:@RestController,此注解是Spring4.0之后新增的,作用也是標記java類為控制器,但是多了一點特性,可以讓類下所有方法都返回json格式的數據,我們來做個實驗:
    在做這個之前,我們要開啟”annotation-driven”:
    在spring-servlet.xml中加入這段配置就行了:
    <mvc:annotation-driven />
    

    這個注解的作用是
  • 注冊了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter兩個bean,配置一些messageconverter。
    它解決了@Controller注解的使用前提配置,本來上章中忘了配置,發現@Controller能被請求所以就沒寫了這里要加上
  • 然后我們新建一個controller,用@Controller注解標記,在里面寫一個方法return一個字符串”dayaoguai”(由于沒有設置字符編碼,所以用拼音):

    @Controller
    @RequestMapping(value = "/json")
    public class JsonController {
    
      @RequestMapping(value = "/test")
      public String jsonTest(){
    
          return "dayaoguai";
      }
    }
    

    寫好之后我們啟動項目,訪問這個地址:

    恩,頁面直接404了

    控制臺也報了個錯,至于為什么會這樣,以后的課程中你就會知道原因了。
    那么我們將@Controller換成@RestController試試:

    @RestController
    @RequestMapping(value = "/json")
    public class JsonController {
    
      @RequestMapping(value = "/test")
      public String jsonTest(){
    
          return "dayaoguai";
      }
    }
    


    頁面成功打印了dayaoguai,而控制臺什么都沒報。其實這就是返回了json格式的數據了,大家下去可以將”dayaoguai”這個字符串換成一個json字符串(一般用fastjson將對象轉成json字符串)試試。

總結下異同:

  • 相同點:
    • 兩個注解都可以將實體類標記為控制器讓SpringMVC掃描到
  • 不同點:
    • @Controller return的內容不能被頁面直接接收到
    • @RestController會將標記的內容返回為一個json格式的字符串,頁面可以直接接收到
  • 接下來說說@RequestMapping這個注解:
    • 請求方式
      我們前面一直都是用GET請求方式,其實在我們還可以把請求方式改為POST,設置method屬性即可:
      在上章TestController基礎上修改
      @RequestMapping(value = "/test", method = RequestMethod.POST)
      public void test(){
        System.out.println("進來了");
      }
      
      改完運行之后再訪問:

      頁面報了405,說GET請求方式不允許被訪問,

      控制臺也報了同樣的錯誤,
      我們用Poster進行POST請求試試:

      雖然頁面報了404,但是我們可以看到控制臺有打印,所以這個證明請求成功了。
      • restful:
        我們還可以將url映射成restful風格。
        @RequestMapping(value = "/restful/{id}")
        public void restful(@PathVariable int id){
        System.out.println(id);
        }
        
        這里我們還有另外兩種寫法:
        @RequestMapping(value = "/restful/{id}")
        public void restful(@PathVariable("id") int userId){
        System.out.println(userId);
        }
        
        @RequestMapping(value = "/restful/{id}")
        public void restful(@PathVariable(value="id") int userId){
        System.out.println(userId);
        }
        
        兩種方式的效果是一樣的。
        我們可以試著訪問幾個連接:
        http://localhost:8080/SpringMVC_Demo/test/restful/1
        http://localhost:8080/SpringMVC_Demo/test/restful/2
        http://localhost:8080/SpringMVC_Demo/test/restful/3
        通過查看控制臺,你會發現,我們可以通過這種方式將參數攜帶進url中進行傳遞

        這種方式有個場景,比如說我們做app的文章分享頁,頁面是H5的,然后app點擊分享之后提交個url給分享平臺比如QQ,微信啥的,我們就可以利用這種連接,將文章id進行base64啥的方式進行加密,然后由app拼接連接,用戶訪問連接之后,后端拿到加密的id再解密,查到文章詳情渲染給頁面。
        當然,被”{}”包住的內容很強大,還可以支持正則表達式,有興趣的同學可以私下研究。

總結:

  • @RequestMapping注解可以注解到類上也可以注解到方法上,如果類上沒有可以直接訪問方法的value路徑,如果類上有,并且value不為空,需要先訪問類的路徑再訪問方法的路徑。
  • value屬性表示訪問的具體路徑,如果注解只有這一個屬性可以省略value,如”@requestMapping(“/test”)”。
  • method指定url的請求方式,需要使用RequestMethod枚舉類,除了常用的GET,POST還有一些其它的,可以自行去了解。
  • 如果使用restful風格url進行傳參,參數必須使用{}進行包裹,在接收參數的位置之前必須使用@PathVariable注解,如果接收參數變量名和{}的內容一樣,@PathVariable注解可以不用設置屬性,如果想自定義變量名,必須給@PathVariable設置value屬性或者直接寫上屬性值。

另外附上項目源碼:https://share.weiyun.com/72baeaceadb60a087a22f10309deb0ce

分享到:
1條評論
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回復:200 積分:7517

已加入社區[3076]天

夢里巷口,可有你倚門回首

作者詳情》
Top