百科狗-知识改变命运!
--

springBoot @RequestBody 写在方法上与写在参数上的区别?

桃子1年前 (2023-12-05)阅读数 7#综合百科
文章标签注解方法

1. @Controller

控制层组件,定义一个springMVC的控制器类,往往需要和@RequestMapping配合使用。

2. @RestController

相当于@ResponseBody+@Controller合在一起的作用。

3. @Service

服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,也可以指定bean的名称:@Service(“beanName”)。

4. @Repository

持久层组件,用于标注数据访问组件,即DAO组件。

5. @Component

把普通pojo实例化到spring容器中,相当于配置文件中的 。

6. @RequestMapping

用于配置控制层的访问URL,可以用在控制器类上和控制器方法上,如果用在控制器类上,则访问类中的方法是要加上类上的路径,例如:

@Controller

@RequestMapping("/personal/linkInfo")

public class LinkInfoController {

@RequestMapping(value = "/addLinkInfo")

public String addLinkInfo(LinkInfoReq linkInfoReq) {

linkInfoService.addLinkInfo(linkInfoReq);

return "redirect:/personal/linkInfo/toLinkInfo";

}

}

上述代码的访问路径就是XXX/personal/linkInfo/addLinkInfo。

@RequestMapping源代码如下图:

a) value:设置访问的URL,数组,可以将多个请求映射到一个方法上去。支持通配符配置

代码示例:

@RequestMapping(value = {"/page","/page*"})

public void getInfo() {

}

上述代码访问路径可以是:XXX/page,XXX/pageadc等满足value条件的路径。

b) method:设置访问的方法,数组,可是设置多个访问方法映射到同一个方法上,默认为GET方法

代码示例:

@RequestMapping(value = "/page", method = RequestMethod.POST)

public void getInfo() {

}

上述代码 /page路径就只能用POST方法才能请求。

method的可选值有GET,HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE。

c) params:指定request中必须包含某些参数值是,才让该方法处理。数组。

@RequestMapping(value = "/page", params = {"type=1"})

public void getInfo() {

}

上述代码/page路径只有请求参数中包含type且值等于1时才能访问该方法。

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

示例代码:

@RequestMapping(value = "/page", headers = {" content-type=text/plain " })

public void getInfo() {

}

上述代码/page路径只有headers中content-type=text/plain才能访问该方法。

e) consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html。

f) produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

7. @ResponseBody

通常使用在controller方法上,作用是将方法的返回值通过合适的HttpMessageConverter转换成特定格式写入到response的body区域,然后返回给客户端,如果没有使用@RequestBody注解,方法返回值将会封装到ModelAndView并解析返回视图。

8. @RequestParam

接受的参数来自requestHeader,即请求头,用来接收GET和POST请求参数并将参数赋值到被@RequestParam注解的变量上,同样可以使用requet.getParameter(“name”)获取,默认的参数接受方式,如果controller方法的参数未使用@RequestParam,则默认也是使用@RequestParam接受参数。用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。

@RequestParam有三个配置参数:

a) required:是否必须,默认true,必须。

b) defaultValue:默认值,请求的参数为空时使用默认值。

c) value:请求的参数名。

9. @RequestBody

接受的参数来自requestBody,即请求体,一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。

springBoot @RequestBody 写在方法上与写在参数上的区别?

10. @Autowired

它可以对类成员变量,方法及构造函数进行标注,完成自动装配工作,可以消除set,get方法。

11. @Resource

其作用和@Autowired相似。

不同点:

@Resource是Java自己的注解,@Resource有两个属性重要属性,分是name和type;Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Autowired是spring的注解,是spring2.5版本引入的,@Autowired只根据type进行注入,不会去匹配name。如果涉及到type无法辨别注入对象时,那需要依赖@Qualifier注解一起来修饰。

@Resource装配顺序

a) 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

b) 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

c) 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

d) 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

推荐使用@Resource,不用谢set方法,并且这个注解属于java自己的,减少了与spring的耦合度。

12. @Value

该注解有两种使用方式:

a) @Value(“${}”)

这种使用方式注入的是配置文件里的参数

这样配置文件中的com.title就能配置到LinkInfoController的title属性中

b) @Value(“#{}”)

该方式表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。

这样就可以把User对象的name配置到LinkInfoController的name属性中。

13. @Transactional

用于配置spring事务管理。属性信息如下:

事物的传播行为如下:

14. @SpringBootApplication

该注解其实是一个组合注解,源码如下图:

比较重要的注解有三个:

a) @SpringBootConfiguration

从源代码可以看到@SpringBootConfiguration继承自@Configuration,这两个注解的功能也是一样的。

b) @EnableAutoConfiguration

此注释自动载入应用程序所需的所有Bean。

c) @ComponentScan

该注解会扫描指定路径下的的类,并将其加入到IoC容器中。在springboot中,@ComponentScan默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。

15. @Configuration

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

16. @Bean

该注解主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。相当于配置文件里的。

@Configuration

public class RedisConfig extends CachingConfigurerSupport{

@Bean

public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {

RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);

return redisCacheManager;

}

}

如上代码就相当于在xml文件里配置:

17. @MapperScan

指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类添加位置:是在Springboot启动类上面添加:

18. @EnableCaching

该注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。

@Configuration

@EnableCaching

public class RedisConfig extends CachingConfigurerSupport{

/**

* 采用RedisCacheManager作为缓存管理器

* @param connectionFactory

* @return

*/

@Bean

public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {

RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);

return redisCacheManager;

}

}

19. @EnableRedisHttpSession

用来设置springboot使用redis存储session,该注解会创建一个名字叫springSessionRepositoryFilter的Spring Bean,其实就是一个Filter,这个Filter负责用Spring Session来替换原先的默认HttpSession实现。

示例代码如下:

@Configuration

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60*30)

public class HttpSessionConfig {

}

其中属性maxInactiveIntervalInSeconds是设置session的有效时间,单位毫秒,默认1800ms。

但其实这样还是不够的,还要在配置文件中设置redis存储session:

spring.session.store-type=redis

这样就可以了。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)