SpringBoot 常见注解
admin
2024-03-02 19:37:39
0

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)

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 注解;

    @Controllerpublic class PageController {@RequestMapping(value="/login")public String str(String s) {return "logining";}}

前后端传值

1.@PathVariable

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

    @GetMapping("/klasses/{klassId}")public List getKlassRelatedTeachers(@PathVariable("klassId") Long klassId ) {...}

如果我们请求的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返回值的方法

    @Controllerpublic class MyController{@ModelAttributepubilc void populateModel(@RequestParam String abc,Model model){model.addAttribute("attributeName",abc);}@RequestMapping(value = "/helloWord)public class HelloWOrd(){return "helloWord.jsp";}}

在访问控制器方法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"%>@ModelAttributepublic class getUser(@RequestParam(value = "userName",required = false) String userName,Model model){User user = new User(userName,"123");model.addAttribute("user",user);}

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

    RequestMapping("/test")public String test(Model model){System.out.println("test: " + model.get("user"));return success;}

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

@ModelAttribute注释返回具体类的方法

实例1
    @Controllerpubilc class helloModelController{@ModelAttributepubilc User populateModel(){User user = new User();user.serAccount("key");return user;}@RequestMapping(value = "/helloWord2)public String helloword(){return "HelloWorld.jsp";}}

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

相关内容

热门资讯

宇信科技向港交所提交上市申请书 6月18日消息,利弗莫尔证券显示,北京宇信科技集团股份有限公司向港交所提交上市申请书,联席保荐人为华...
美格智能向港交所提交上市申请 6月18日消息,据港交所文件,美格智能技术股份有限公司向港交所提交上市申请书,独家保荐人为中金公司。...
大中矿业:拟投资10亿元建设年... 6月18日消息,大中矿业公告,公司与临武高新技术产业开发区管理委员会签署《投资协议书》,计划在临武县...
沃尔核材:拟3.4亿元购买长园... 6月18日消息,沃尔核材公告,公司于2025年6月18日召开的第七届董事会第三十次会议审议通过了《关...
东方财富:为全资子公司天天基金... 6月18日消息,东方财富公告称,公司全资子公司天天基金与民生银行上海分行继续开展合作,民生银行上海分...
从专业跑鞋到全品类扩张:昂跑增... 瑞士高端跑鞋品牌昂跑(On Holding)日前突发管理层变动公告,宣布现任CEO马丁·霍夫曼将于2...
特朗普称将“很快”撤军 伊朗否... 当地时间4月1日,美国总统特朗普表示美军将“很快”从伊朗战事中撤出,并提出以伊朗重新开放霍尔木兹海峡...
鸿富瀚:拟与专业投资机构共同投... 6月18日消息,鸿富瀚公告称,公司作为有限合伙人与普通合伙人深圳市高新投人才股权投资基金管理有限公司...
韩国计划未来5年在人工智能领域... 6月18日消息,韩联社援引韩国科技部向总统国政规划委员会报告的计划称,韩国政府将在未来5年内在人工智...