springboot常用標籤介紹

1、問題描述

springboot下,基本全標籤化了,spring標籤很多,有時候會混淆,簡單記錄下,以免有時候會迷糊。

2、解決方案

2.1 @Controller/@Service/@Repository/@Component

簡單說明:

@Controller用於標註控制層組件;
@Service用於標註業務層組件;
@Repository用於標註數據訪問組件,即DAO組件;
@Component泛指組件,組件不好分類的的時候,使用該標籤;

(1)2.5以前這幾個標籤作用是一樣的,都是用於將POJO加載到spring容器中,不同是的業務層面,不同的標籤名字讓人一目瞭然類的作用,但實際作用一樣;

(2)spring5開始,@Controller有點不一樣了,簡單來說就是隻有被標註爲@Controller的類,Spring纔會自動的去掃描該類裏面的@RequestMapping,假如類被標記爲其他標籤,裏面的@RequestMapping是不會被識別的,通過頁面訪問,會報找不到該資源;

2.2 @RequestMapping

非常重要的一個標籤,用於映射請求,也就是通過它來指定控制器可以處理哪些URL請求,簡單來說用戶頁面通過IP:端口/該地址,後臺就能捕獲/接收到該請求;

相當於Servlet中在web.xml中配置的映射作用一致

<servlet>
    <servlet-name>servletName</servlet-name>
    <servlet-class>ServletClass</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletName</servlet-name>
    <url-pattern>url</url-pattern>
</servlet-mapping>

@RequestMapping類:

@Target({ElementType.TYPE, ElementType.METHOD})
@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 {};

}

(1)@Target({ElementType.TYPE, ElementType.METHOD}),表明@RequestMapping()既可以標註類上面,也可以標註再方法上,同時標註的話,瀏覽器訪問需要拼接起來,例如:IP:端口號/項目名稱/類上的標註value/方法value

(2)可以看到註解中的屬性除了 name() 返回的字符串,其它的方法均返回數組,也就是可以定義多個屬性值,例如 value() 和 path() 都可以同時定義多個字符串值來接收多個URL請求;

@RestController
@RequestMapping("/hello")
public class Hello {
    @RequestMapping(value = {
            "/test",
            "/aa"
    })
    public String test() {
        return "老王是帥哥";
    }
}

當瀏覽器錄入:

http://localhost:6060/hello/aa
或者
http://localhost:6060/hello/test

(3)其他還有很多設置,比如@GetMapping("/test"),@PostMapping("/test"),其實就是設置了method,還有參數佔位等就不多說,比較散,用的時候自己查一下吧。

2.3 RequestBody與ResponseBody

@RequestBody 註解則是將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。
作用:

  1. 該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然後把相應的數據綁定到要返回的對象上;

  2. 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。

@ResponseBody註解的作用是將controller的方法返回的對象通過適當的轉換器轉換爲指定的格式之後,寫入到response對象的body區,通常用來返回JSON數據。

示例:

@RequestMapping(value = "user/login")
@ResponseBody
public User login(@RequestBody User user) {   
// 這樣就不會再被解析爲跳轉路徑,而是直接將user對象寫入 HTTP 響應正文中
    return user;   
 }

2.4 @Controller和@RestController

@RestController相當於@Controller+@ResponseBody合在一起使用的效果,返回json數據格式。

2.5 springboot約定訪問(static與templates)

前端資源,有兩個約定的目錄,resources\static和resources\templates,現在前後端分離,這兩個目錄用的比較少,但是也是需要知道這兩個目錄幹嘛用的,有時候後端測試的時候可以用一下,static用戶放置資源,一般是圖片、js等靜態資源;templates用於放置動態頁面;

(1)靜態資源,約定放到resources\static下面就可以直接訪問;

直接訪問:

(2)動態頁面,約定放置到resources\templates下面

默認放置到templates目錄下面的動態html頁面(1.html)不能直接訪問的,springboot默認的前端開發是thymeleaf,需要添加該pom依賴;

(1)添加pom依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

(2)cotroller跳轉,不能使用@RestController,要使用@Controller

@Controller
public class test {
    @GetMapping("/test")
    public String test() {
       return "1";
    }
}

效果:


更多信息請關注公衆號:「軟件老王」,關注不迷路,軟件老王和他的IT朋友們,分享一些他們的技術見解和生活故事。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章