当前位置: 澳门新濠3559 > 编程 > 正文

method配置请求方式,常用注解介绍及简单使用

时间:2019-10-06 23:49来源:编程
@Component、@Service、@Repository 这三者都是申明一个单例的bean类并纳入spring容器中,后两者其实都是继承于 @Component 。 @Component 最普通的组件,可以被注入到spring容器进行管理 @Repository 作

@Component、@Service、@Repository

这三者都是申明一个单例的bean类并纳入spring容器中,后两者其实都是继承于@Component

  • @Component 最普通的组件,可以被注入到spring容器进行管理

  • @Repository 作用于持久层

  • @Service 作用于业务逻辑层

通常一些类无法确定是使用@Service还是@Component时,注解使用@Component,比如redis的配置类等

 

<context:component-scan base-package="com.itbofeng"></context:component-scan>

其他注解

@ModelAttribute

主要是绑定请求参数到指定对象上。此注解可被用于方法、参数上。

  • 运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用;
  • 运用在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中;

由于现在都采用前后端分离开发,故此注解相对用的较少了,但对于一些在每次请求前需要进行一些额外操作时。使用此注解依然是个选择,比如进行统一的业务校验等,但使用此注解实现类似功能时需要注意,使用异步调用时,比如callable或者DeferredResult时,被此注解的方法会执行两次,因为异步请求时,是挂起另一个线程去重新执行,对于配置了拦截器而已,它们的执行顺序为

preHandle ---->afterConcurrentHandlingStarted ----> Controller---->preHandler----> postHandler ----> afterCompletion

拦截器的相关知识点会在下章进行说明,这里只是特殊说明下。解决方案的话可简单根据DispatcherType类型进行判断,异步时对应类型为:ASYNC,第一次请求正常为:REQUEST。

本章节主要是阐述了在web开发时一些常用的注解,但比如一些像@autowired@resource@Qualifier等在此就不列举了,这些都比较简单。对于开发者而言这些基本上都了解。

目前互联网上很多大佬都有springboot系列教程,如有雷同,请多多包涵了。本文是作者在电脑前一字一句敲的,每一步都是实践的。若文中有所错误之处,还望提出,谢谢。

  • 个人QQ:499452441
  • 微信公众号:lqdevOps

图片 1公众号

个人博客:

@Component、@Service、@Repository

这三者都是申明一个单例的bean类并纳入spring容器中,后两者其实都是继承于@Component

@Component 最普通的组件,可以被注入到spring容器进行管理

@Repository 作用于持久层

@Service 作用于业务逻辑层

通常一些类无法确定是使用@Service还是@Component时,注解使用@Component,比如redis的配置类等

 @ResponseBody @RequestMapping(value = "/hello",method = RequestMethod.GET) public String hello(@RequestParam String name){ return "hello " name; }

@GetMapping和@PostMapping

@RequestMapping

一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

常用属性:

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

常用的基本上就valuemethod了。其简化注解有

@GetMapping 等同于 @RequestMapping(method = RequestMethod.GET)@PostMapping 等同于 @RequestMapping(method = RequestMethod.POST)@PutMapping 等同于 @RequestMapping(method = RequestMethod.PUT)@DeleteMapping 等同于 @RequestMapping(method = RequestMethod.DELETE)@PatchMapping 等同于 @RequestMapping(method = RequestMethod.PATCH)

常用注解

@springBootApplication 系统启动类注解,此注解是个组合注解,包括了:@SpringBootConfiguration,@EnableAutoConfiguration,@ConmentScan三个注解的组合。

@SpringBootConfiguration 继承至@Configuration,对于熟悉spring的开发者而言,此标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。

@EnableAutoConfiguration 此注解就是SpringBoot 能够自动进行配置的魔法所在,通过此注解能够将所有符合自动条件的Bean的定义加载到spring容器中。

比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置。

@ComponentScan 这个熟悉spring的开发者也应该熟悉,会扫描当前包及其子包下被@Component,@Controller,@Service,@Repository等注解标记的类并纳入到spring容器中进行管理。

 <!--包扫描、如果想要include-filter起作用需要设置use-default-filters="false",禁用默认过滤规则--> <context:component-scan base-package="com.itbofeng" use-default-filters="false"> <!--排除--> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter> <!--仅包括--> <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"></context:include-filter> </context:component-scan>

 

@Controller 和 @RestController

@RestController 是Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。而@Controller是用来创建处理http请求的对象,一般结合@RequestMapping使用。

@PathVariable、@RequestParam、@RequestAttribute

method配置请求方式,常用注解介绍及简单使用。@PathVariable用来接收参数,如/path/001,可接收001作为参数

图片 2

@RequestParam 用来接收URL中的参数,如/param?id=001,可接收001作为参数

图片 3

@RequestAttribute用于访问由过滤器或拦截器创建的、预先存在的请求属性,效果等同与request.getAttrbute().

图片 4

@Component、@Configuration、@Controller、@Service、@Repository其实在web开发中我们最常用的组件是@Component、@Configuration、@Controller、@Service、@Repository这几个注解都有一个作用,往容器中添加一个组件他们都是@Component组合注解,他们标注在类上面,表示往spring容器中添加一个组件,@Controller用来标注在Controller上面,@Service用来标注Service层上面,@Repository用来标注在持久层上面,@Configuration用来标注在配置类上,@Component用来标注在其他组件上面。@RequestMapping在SpringMVC中还有个重要的注解@RequestMapping,它是用来做地址映射的,就是说,我们一个请求,该如何映射到我们的方法上面。它可用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。RequestMapping注解有六个属性,其中常用的有value, method、非常用的有params,headers、consumes,produces,value:指定请求的实际地址,method: 指定请求的method类型, GET、POST、PUT、DELETE等;params: 指定request中必须包含某些参数值是,才让该方法处理。headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;produces: 指定返回的内容类型,仅当request请求头中的类型中包含该指定类型才返回,例子:

  

@PathVariable、@RequestParam、@RequestAttribute

  • @PathVariable用来接收参数,如/path/001,可接收001作为参数

图片 5PathVariable

  • @RequestParam 用来接收URL中的参数,如/param?id=001,可接收001作为参数

图片 6RequestParam

  • @RequestAttribute用于访问由过滤器或拦截器创建的、预先存在的请求属性,效果等同与request.getAttrbute().

图片 7RequestAttribute

@ModelAttribute

主要是绑定请求参数到指定对象上。此注解可被用于方法、参数上。

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

运用在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中;

 

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.itbofeng</groupId> <artifactId>SpringDemo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.7.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies></project>

@Component 表明此类将注入Spring容器给予管理,而@Repository、@Service和@Controller的注解接口都使用了@Component

之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于SpringSpringMvc等各类spring家族的一个解决方案,可快速进行集合。故相关知识点其实大部分都是基于spring或者springmvc既有的知识点的。本章节,主要讲解的是关于web开发springboot独有的一些常用注解进行说明。

@RequestMapping

一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

常用属性:

value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式;
method: 指定请求的method类型, GET、POST、PUT、DELETE等;

consumes,produces;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

params,headers;
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

 

常用的基本上就value和method了。其简化注解有

@GetMapping 等同于 @RequestMapping(method = RequestMethod.GET)
@PostMapping 等同于 @RequestMapping(method = RequestMethod.POST)
@PutMapping 等同于 @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping 等同于 @RequestMapping(method = RequestMethod.DELETE)
@PatchMapping 等同于 @RequestMapping(method = RequestMethod.PATCH)

注意:请求路径的变化今天注解部分就先将到这里,后面我们在学习过程中学到什么,再具体讲解其用法,关于这些注解的在什么时候起作用的呢,需要我们学习了Spring的运行流程之后,才能进一步的进行深入了解,下一节,我们学习一下往容器中添加Bean的几种方式。

 @Service 对实体类的注释,表明此类为业务层。

图片 8SpringBoot | 第六章:常用注解介绍及简单使用

@RequestBody和@ResponseBody

@RequestBody注解允许request的参数在reqeust体中,常常结合前端POST请求,进行前后端交互。

@ResponseBody注解支持将的参数在reqeust体中,通常返回json格式给前端。

java

  图片 9

@SpringBootApplication

前几章,在系统启动类里面,都加入了此启动注解,此注解是个组合注解,包括了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan注解。

  • @SpringBootConfiguration 继承至@Configuration,对于熟悉spring的开发者而言,此标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。

  • @EnableAutoConfiguration 这个注解就是springboot能自动进行配置的魔法所在了。主要是通过此注解,能所有符合自动配置条件的bean的定义加载到spring容器中,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvctomcat,就会自动的帮你配置web项目中所需要的默认配置。具体的使用,会在后期自定义实现一个自动启动类时,会讲解到它的一些机制。此章节就不深入了,只需要它是这个用途即可,一般上也单独使用不要这个注解,但比如需要排除一些无需自动配置的类时,可利用exclude进行排除。

  • @ComponentScan 这个熟悉spring的开发者也应该熟悉,会扫描当前包及其子包下被@Component,@Controller,@Service,@Repository等注解标记的类并纳入到spring容器中进行管理。

@Controller 和 @RestController

@RestController 是Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。而@Controller是用来创建处理http请求的对象,一般结合@RequestMapping使用。

 @Lazy @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) @Bean public User user(){ return new User("lisi",18); }

  即@GetMapping接收的是get请求,@PostMapping接收的是post请求

@RequestBody和@ResponseBody

  • @RequestBody注解允许request的参数在reqeust体中,常常结合前端POST请求,进行前后端交互。

  • @ResponseBody注解支持将的参数在reqeust体中,通常返回json格式给前端。

 @Test public void testAnnoation(){ //通过注解创建容器,需要传入配置类 ApplicationContext applicationContext=new AnnotationConfigApplicationContext(MainConfig.class); //获取bean User user=  applicationContext.getBean; System.out.println; }

 Service注解

java

  请求的url方式 :  url路径?key=value  例:

@ComponentScan注解就相当于 xml配置文件中的context:component-scan标签,下面讲解一下他的基本使用方法:xml

  处理http请求

<bean scope="singleton" lazy-init="true"> <property name="name" value="zhangsan"></property> <property name="age" value="13"></property></bean>

@PathVariable

package com.itbofeng.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controllerpublic class UserController { @RequestMapping(value = "/hello",method = RequestMethod.GET) public String hello(){ return "hello"; }}

@Controller 

有了该例子相信大家对@Configuration有了一个基本的认识,其就相当于Spring配置文件的功能,不过是以注解的方式进行体现,之前我们在配置文件中多采用包扫描的方式进行,那么这种方式在配置类中如何体现呢,下面我们引入第二个注解@ComponentScan包扫描注解

Controller常用注解

图片 10运行结果注解方式1、创建配置类MainConfig.java2、注册组件用@Bean注解我们看一下代码

对属性的注释:

package com.itbofeng.bean;/** * 描述:User Bean 用来测试 */public class User { private String name; private Integer age; public User() { } public User(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{"   "name='"   name   '''   ", age="   age   '}'; }}

  获取请求参数的值,@RequestParam(value = "id",required = false,defaultValue = "1")  value即传参名称,required = false不是必须传入(默认为true),defaultValue 当不传入参数时的默认值

 @ResponseBody @RequestMapping(value = "/hello/{name}",method = RequestMethod.GET) public String hello(@PathVariable String name){ return "hello " name; }

  图片 11

@RestController@RestController=@Controller @ResponseBody@PathVariable、@RequestParam@PathVariable 路径变量,主要是将路径中的值映射为变量(Rest编程风格推荐),@RequestParam 请求参数,主要是获取请求中的参数下面我们举例说明:地址① 方式

  3.@Column(name = "password",unique = true,nullable = false,length = 255) 可设置列名、唯一属性、不为空、长度等。

import com.itbofeng.bean.User;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * 描述:测试类 */public class MainConfigTest { @Test public void testXml(){ //通过配置文件创建容器,需要传入配置文件 ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml"); //获取bean User user=  applicationContext.getBean; System.out.println; }}

 

3、运行测试

  组合注解,@GetMapping等同于@RequestMapping(method = RequestMethod.GET),@PostMapping等同于@RequestMapping(method = RequestMethod.POST)

注:该部分内容包含一些常用注解,如果没有学习过java注解的同学可以先看一下上一小节的内容Spring Boot 注解—基本知识 ,不看也没关系,下面就开始本节内容。

  4.@Min/Max 设置最小值或最大值

@ResponseBody如果我们配置了视图解析器ViewResolver,如果我们访问 localhost:8080/hello还并不能够返回hello,其会返回视图解析器的前缀 hello 后缀的页面,如果我们想要其向浏览器返回hello内容,则需要@ResponseBody注解,该注解就是将返回值直接返回给浏览器,如果返回值是一个对象,则会返回该对象的json对象,其可以标注在方法上表示该方法返回遵守该规则,也可以标注在类上,表示该类下的所有方法都遵守该规则。用法如下:

 @Transactional 可对实体类或方法进行注释,对实体类注释表明此类的全部方法都是用事务。一般使用在方法中有多条执行更新数据库的语句。以防执行错误导致数据错误。

package com.itbofeng;import com.itbofeng.bean.User;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * 描述:该类对@Configuration注解进行讲解 */@Configurationpublic class MainConfig { /** * 给容器中加入Bean,相当于配置文件总的bena标签 * id 默认是方法名称,也可以指定id * class 即返回值类型 */ @Bean public User user(){ return new User("lisi",18); }}

 Repository注解

这样就可以对com.itbofeng包下的@Controller、@Service、@Component、@Respoitory、@Component标注的类进行扫描,并由Spring容器进行管理,当然spring并不是这么简单的,它还可以进行排除,仅包含,我们看一下xml和java的语法xml

  1.@Id此属性为主键

配置文件方式1、创建类路径配置文件beans.xml2、创建User类

  配置url映射,value配置url方法路径,method配置请求方式, 例:@RequestMapping(value="hello",method = RequestMethod.GET)

@Configuration@ComponentScan("com.itbofeng")public class MainConfig { //...}

@RequestMapping 

 @ResponseBody @RequestMapping(value = "/hello",method = RequestMethod.GET) public String hello(){ return "hello"; }
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
    String value() default "";
}

@Configuration注解意思是往容器中加入一个组件,该组件的主要作用是进行一些配置,相当于之前配置的配置文件,下面我们用两种方式对其进行演示:准备工作pom.xml

 

对于jdk1.8及以上@ComponentScan支持重复注解,另外还有@ComponentScans注解可以写多个@ComponentScan注解,另外需要说明的两种过滤方式排除和仅包含在一个包扫描中仅可出现一个。关于@ComponentScan.Filter.type的取值大家可以参考:

  ...

图片 12运行结果

 

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean > <property name="name" value="zhangsan"></property> <property name="age" value="13"></property> </bean></beans>

 

2、在配置文件中加入User bean

     

@Configuration@ComponentScan(value = "com.itbofeng",excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})},includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Service.class})},useDefaultFilters = false)public class MainConfig { //...}

@RestController

等同于

 

@PathVariable 方式

@Entity 对实体类的注释,表明此类映射数据库的表

以上配置类就等同于beans.xml中的内容3、运行测试

 

 

 

 下面是Spring的@Service注解接口

  Spring4之后新加的注解,原来返回json数据需要@ResponseBody配合@Controller,现在合并成@RestController

@RequestParam

  获取url中的数据,,请求的url方式 :  url路径/value  ,例: ,请求方式相对于@RequestParam简洁

  2.@GenerateaValue 设置为自增列

编辑:编程 本文来源:method配置请求方式,常用注解介绍及简单使用

关键词: 澳门新濠3559