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

  • 相关阅读:
    Asp.Net Core 2.0 之旅---在Ubuntu上部署WEB应用程序
    xml对象序列化
    txt文本文件记录日志
    HttpGet HttpPost
    c# MD5
    10位时间戳转为C#格式时间
    树莓派上运行.net core 2.0程序
    c# 解析json
    小程序与后台数据交互时出现乱码时
    小程序template怎样渲染页面的
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/16300294.html
Copyright © 2020-2023  润新知