• SpringBoot 常见注解


    SpringBoot 常见注解

    1.ModelAndView:

    1)ModelAndView 用于后台与前端页面交互;
    2)可以用于重定向与转发到指定页面,
    3)可以保存数据然后渲染到页面

    ‘’’

      
        
        
        
        
      
    ‘’’

    @Valid 表示对后面的对象属性需要进行验证
    在参数直接添加一个BindingResult,用于保存验证结果

    ​ public ModelAndView doLogin(HttpServletRequest request, @Valid @ModelAttribute ExternalUploadLoginForm loginForm,
    ​ final BindingResult bindingResult, RedirectAttributes ra)

    @JsonProperty 主要作用在实体类的属性上,在反序列化的时候给属性赋值

    常用注解总结

    1.SpringBoot 启动

    1.@SprinBootApplication
    通常标注在springboot主启动类上。
    创建springboot项目之后会自动在主启动类上添加。

    是一个复合解:可以由以下三个注解代替
    @EnableAutoConfiguration:启动SpringBoot 的自动配置,是SpringBoot 实现自动化配置和核心注解,可以将 Spring应用所需的bean注入到容器中
    @ComponentScan:用于类或者接口上,主要是扫描路径 ,Spring 会把指定路径下带有指定注解的类自动装配到Bean容器里。
    @SpringBootConfiguration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类

    2. SpringBoot配置

    1.@Autowired
    作用在属性上
    默认将属性名作为组件的ID注入到容器中
    自动导入对象到类中,该对象也是由Spring管理
    该注解默认是优先按照类型去容器中找对应的组件,如果有多个相同类型的组件,再通过按照属性的名称作为组件的id去容器中找。
    @Autowired(required = false) 默认是true,找不到会报错,设置为false后,找不到也不会报错。
    2.@Qualifier
    搭配@Autowired注解使用,可以指定组件的名称,而不是使用属性名。
    3.Component(通用)、@Service(service层、@Controller(controller层)、@Repository(DAO层)
    标注在类上
    要想把类标识成可以被@Autowired注解自动装配的bean的类,就需要加入这些注解。
    4.@RestController
    标识该类是一个控制器Bean
    @Controller和@ResponseBody的合集。REST风格;前后端不分离。
    将函数的返回值直接填入到HTTP响应体中,返回JSON或XML数据,显示在浏览器。因为如果只是使用@Controller(传统springmvc应用)的话,我们一般都是返回一个视图。
    5.@Scope
    设置作用域
    标注在Bean方法对象上,不用设置,默认是单实例。
    @Scope(“prototype”) — 设置组件为多实例,ioc容器启动不会重新调用方法创建对象放到ioc容器中,每次获取的时候才会调用,获取一次创建一次
    @Scope(“singleton”) — 设置组件为单实例,ioc容器启动会调用方法创建对象放到ioc容器中,以后每次获取都是直接从容器中拿。
    6.@Confifuration
    标注在类上,将类设置成配置类
    用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。
    7.@Bean
    标注在方法上,给容器中添加组件,
    以方法名作为组件的ID,返回类型就是组件类型。返回的值就是组件在容器中的实例
    8.@ResponseBody
    既可以在类上使用也可以在方法上使用,在类上使用表明该类的所有方法返回JSON数据
    也可以与@Controller 一起使用注解合并成@RestController,作用是将@Controller方法返回的对象通过适当的转换器转换为指定格式后,写入到@ResponseBody中的Body区通常用来返回JSON数据或者是XML数据。
    在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

    处理常见的HTTP请求类型

    常见的四种请求:
    Get请求:请求从服务器上获取资源;
    POST请求:在服务器上创建新的资源;
    Put请求:在服务器上更新资源;
    Delete请求:在服务器上删除资源;

    1.@GetMapping
    标注在方法上:

        @GetMapping("users")  等价于  
        @RequestMapping(value="/users",method=RequestMethod.GET)
    
    • 1
    • 2

    2.@POSTMapping
    3.@PutMapping
    4.@DeleteMapping

    5.@RequestMapping

    标注在方法上
    将HTTP的请求映射到MVC或REST控制器的处理方法上;

    value: 指定请求的实际地址
    method: 指定请求的method类型, GET、POST、PUT、DELETE等;
    consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
    produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
    params: 指定request中必须包含某些参数值是,才让该方法处理。
    headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

    @Controller用于标记在一个类上,使用它标记的类就是一个SpringMVC的 Controller类,
    分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了 @RequestMapping 注解;

        @Controller
        public class PageController {
            @RequestMapping(value="/login")
            public String str(String s) {
                return "logining";
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    前后端传值

    1.@PathVariable

    标注在形参,用于获取路径参数,使用{参数名称}描述路径参数
    获取URl中的数据;

        @GetMapping("/klasses/{klassId}")
        public List<Teacher> getKlassRelatedTeachers(
             @PathVariable("klassId") Long klassId ) {
            ...
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果我们请求的url是这个:/klasses/{123456}
    那么123456这个值就会传入到被@PathVariable标注的对应的形参上,即klassId = 123456

    2.@RequestParam

    标注在形参
    用来绑定请求参数和处理器参数的关系
    获取请求参数的值(问号后的值)
    @RequestMapping(“/getUser”)
    public String getUser(@RequestParam(“uid”)Integer id, Model model) {
    System.out.println(“id:”+id);
    return “user”;
    }
    请求地址:
    http://localhost:8080/User/getUser?uid=1905112
    那么我们形参中id的值就是1905112.

    3.@RequestBody

    标注在形参
    获取请求的Body部分,且Content-Type 为 application/json格式的数据,接收到数据之后会自动将数据绑定到 java对象上。
    作用在方法或者类上,作用是让该方法的结果直接写入HTTP 的responseBody中,不会经过视图解析器。返回数据直接显示在页面上。

    @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),Content-Type 为 application/json 格式;GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

    @RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml格式 或者 json等】封装为对应的 JavaBean 对象。
    封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

    4.@RequestHeader获取请求头
    @CookieValue 获取Cookie

    @ModelAttribute

    1.用在参数上,

    会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用;

    用在方法的入参上依次做如下操作:
    从隐含对象中获取隐含的模型数据
    将请求参数绑定到隐含对象中
    将隐含对象传入到入参
    将入参绑定到Model

    2.用在方法上

    被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,如果有返回值,则自动将该返回值加入到MondelMap中。

    使用@RequestMapping 和 @ModelAttribute注解 的方法有许多相似之处:
    都可以通过入参接受前台提交的数据,而且对于入参绑定的设置都是一样的。入参绑定的数据如果没有设置可为空,不能接收空数据,否则会报错。
    都可以将数据放入model中,而且对于一次请求,model是共享的,所以在处理方法中的model存放了@ModelAttribute注解的方法存放的数据。

    实例:

    @ModelAttribute 注释void返回值的方法

        @Controller
        public class MyController{
            @ModelAttribute
            pubilc void populateModel(@RequestParam String abc,Model model){
                model.addAttribute("attributeName",abc);
            }
            @RequestMapping(value = "/helloWord)
            public class HelloWOrd(){
                return "helloWord.jsp";
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在访问控制器方法helloWord 时,会首先调用populateModel方法,将页面参数abc(helloWord.ht?abc = text)放入model的 attributeName属性中,在视图中可以直接访问。

        <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
        <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
        <html>
        <head>
        </head>
        <body>
        <c:out value="${attributeName}"></c:out>
        </body>
        </html>
        @ModelAttribute
        public class getUser(@RequestParam(value = "userName",required = false) String userName,Model model)
        {
            User user = new User(userName,"123");
            model.addAttribute("user",user);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    @ModelAttribute 注解getUser方法,getUser方法接收前台提交的userName数据,将model中放入user属性和数据。

        RequestMapping("/test")
        public String test(Model model){
            System.out.println("test: " + model.get("user"));
            return success;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    处理方法的入参引入model,由于是同一个请求,所以这个model中存放了@ModelAttribute注解的方法存入的数据。

    @ModelAttribute注释返回具体类的方法
    实例1
        @Controller
        pubilc class helloModelController
        {
            @ModelAttribute
            pubilc User populateModel()
            {
    
                User user = new User();
                user.serAccount("key");
                return user;
            }
            @RequestMapping(value = "/helloWord2)
            public String helloword()
            {
                return "HelloWorld.jsp";
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    当用户请求 http://localhost:8080/helloWord.ht时,首先访问populateModel方法,返回对User对象,model属性的名称没有指定,这种情况不同显示的向model中存放数据,返回的数据会被隐含的放入到model中。在model的key为 “返回类型首字母小写”,value 为返回的值。 上面相当于model.addAttribute(“user”, user)。 这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。

  • 相关阅读:
    JavaScript课堂练习
    四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较
    2022-8-24 华为秋招笔试
    前端面试题 - 元素的innerText outerText innerHTML的区别?
    利用aop+反射拦截mybatisplus的insert方法补充公共属性
    Leetcode160. 相交链表
    Day44 力扣动态规划 : 300.最长递增子序列|674. 最长连续递增序列 | 718. 最长重复子数组
    【优化模型】报童的诀窍
    YoloV8改进策略:复现HIC-YOLOv5,打造HIC-YOLOv8,用于小物体检测
    golang流程控制:if分支、switch分支和fallthrough switch穿透
  • 原文地址:https://blog.csdn.net/weixin_49041703/article/details/128109634