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朋友们,分享一些他们的技术见解和生活故事。

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