天天看點

springboot常用标簽介紹

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

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是不會被識别的,通過頁面通路,會報找不到該資源;

springboot常用标簽介紹
springboot常用标簽介紹

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      
springboot常用标簽介紹

(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下面就可以直接通路;

springboot常用标簽介紹

直接通路:

springboot常用标簽介紹

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

springboot常用标簽介紹

預設放置到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";
    }
}      

效果:

springboot常用标簽介紹

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