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

作者&投稿:郝裘 (若有异议请与网页底部的电邮联系)
关于Restful的问题:将参数写在路径上与写在请求参数上相比有哪些好处?~

两种都可以, 主要看你后台获取参数的controller。 如果这个controller 处理的东西很少,两种都可以很好的获取的参数。
如果你这个controller 复杂, 用第二个方便一点。 第一种有可能url 会混乱
比如 /user/{name} , /user/{type} 这两个都是string 的。 当参数进来时候不知道用那个来处理了
在设计的时候第一个会是这样的 /user/name/zhang3

@RequestParam


A)
常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( 由String到
简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get
方式中queryString的值,也可以处理post方式中 body data的值。

B)用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST。(不设置这个属性,好像这就是默认值)

C) 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定。

在方法参数里面如是:public @ResponseBody JsonResult
getPublishedToposByConnStreamId(@RequestParam(value = "streamId",
required = false) String streamId) {}



@RequestBody


A) GET、POST方式提时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data, 不能处理(次类型多用来上传文件类型---即使用@RequestBody不能处理这种格式的数据,@RequestParam这个却是可以处理的。);
其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);



B) PUT方式提交时, 根据request header Content-Type的值来判断:(表示没见过put方式滴,可以无视吧。)
application/x-www-form-urlencoded, 必须;
multipart/form-data, 不能处理;
其他格式, 必须;

说明:request的body部分的数据编码格式由header部分的Content-Type指定;

1. @Controller
控制层组件,定义一个springMVC的控制器类,往往需要和@RequestMapping配合使用。
2. @RestController
相当于@ResponseBody+@Controller合在一起的作用。
3. @Service
服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,也可以指定bean的名称:@Service(“beanName”)。
4. @Repository
持久层组件,用于标注数据访问组件,即DAO组件。
5. @Component
把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>。
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等类型的数据。
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为方法名。相当于配置文件里的<bean></bean>。
@Configuration
public class RedisConfig extends CachingConfigurerSupport{
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);
return redisCacheManager;
}
}
如上代码就相当于在xml文件里配置:
<beans>
<bean id=" cacheManager " class=" com.mypage.config. RedisCacheManager "/>
</beans>
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
这样就可以了。


Driver does not support get\/ set network timeout for connections是什...
Driver does not support get\/set network timeout for connections错误的原因:pringboot 2.x默认的数据源变成了HikariPool了,弄了一个demo在使用数据源的时候系统报错 HikariPool-1 - Driver does not support get\/set network timeout for connections. (null)。具体的解决办法:通过源码排查到连接...

driver does not support get\/ set network timeout for connections什么...
Driver does not support get\/set network timeout for connections错误的原因:pringboot 2.x默认的数据源变成了HikariPool了,弄了一个demo在使用数据源的时候系统报错 HikariPool-1 - Driver does not support get\/set network timeout for connections. (null)。具体的解决办法:通过源码排查到连接...

driver does not support get\/ set network timeout for connections什么...
Driver does not support get\/set network timeout for connections错误的原因:pringboot 2.x默认的数据源变成了HikariPool了,弄了一个demo在使用数据源的时候系统报错 HikariPool-1 - Driver does not support get\/set network timeout for connections. (null)。具体的解决办法:通过源码排查到连接...

java五层架构(java五层架构模式书)
_SpringBoot框架。SpringBoot是Spring开源组织下的一个子项目,也是Spring组件的一站式解决方案,主要是为了简化使用Spring的框架难度。 ? _摹CloudSpring。 _馐且幌盗锌蚣艿挠行蚣希悄壳白钊让诺奈⒎窨蚣艿氖籽J紫龋_pringBoot开发的便利性,巧妙地简化了分布式系统基础的开发,如服务发现注册、配置中心、消息总线、...

VMware虚拟机能不能让另一台电脑的系统在我的电脑中安装运行?
进入BIOS设置找到 “LAN BOOT”之类,由“Disabled”改为“Enabled” ,具体可参考主板说明文件。按F10保存退出。如是8139类的网卡可在开机显示”SHIFT + F10”的时候,按住右“SHIFT”键加 “F10”进入网卡启动设置画面,在第一项中选择“PXE”,第二项选择“Int 19” 最后按“F4”保存退出。这时工作站应该能够无盘...

怎么解决网吧安装程序重起更新的问题?
进入BIOS设置找到 “LAN BOOT”之类,由“Disabled”改为“Enabled” ,具体可参考主板说明文件。按F10保存退出。如是8139类的网卡可在开机显示”SHIFT + F10”的时候,按住右“SHIFT”键加 “F10”进入网卡启动设置画面,在第一项中选择“PXE”,第二项选择“Int 19” 最后按“F4”保存退出。这时工作站应该能够无盘...

怎么做无盘网吧系统?
进入BIOS设置找到 “LAN BOOT”之类,由“Disabled”改为“Enabled” ,具体可参考主板说明文件。按F10保存退出。如是8139类的网卡可在开机显示”SHIFT + F10”的时候,按住右“SHIFT”键加 “F10”进入网卡启动设置画面,在第一项中选择“PXE”,第二项选择“Int 19” 最后按“F4”保存退出。这时工作站应该能够无盘...

伍家岗区13569076830: spring boot repository做什么用的 -
邸官风湿: SpringBoot:1、微内核2、配置简单3、模块化4、开箱即用5、完全兼容Spring6、设计理念极其先进,很多思想来自OSGi,但是在现有技术的实现缺点:二次改造定制难缺少成熟的SOA或者RPC框架Dubbox:1、完全兼容Dubbo2、功能强大3、性能强悍4、运行稳定

伍家岗区13569076830: 启动spring boot报错,怎么解决
邸官风湿: 【解决办法】 需要在启动类的@EnableAutoConfiguration或@SpringBootApplication中添加exclude = {DataSourceAutoConfiguration.class},排除此类的autoconfig.启动以后就可以正常运行.【原因】 这个原因是maven依赖包冲突,有重复的...

伍家岗区13569076830: spring boot 是什么 知乎 -
邸官风湿: Spring Boot充分利用了JavaConfig的配置模式以及“约定优于配置”的理念,能够极大的简化基于Spring MVC的Web应用和REST服务开发. Spring 4倡导微服务的架构,针对这一理念,近来在微博上也有一些有价值的讨论,如这里和这里.

伍家岗区13569076830: springBoot的方式 怎么启动 -
邸官风湿: 一:IDE 运行Application这个类的main方法 二:在springboot的应用的根目录下运行mvn spring-boot:run 三:使用mvn install 生成jar后运行 先到项目根目录 mvn install cd target java -jar xxxx.jar

伍家岗区13569076830: SpringBoot里@autowired的Bean是从哪儿获得的 -
邸官风湿: @Autowired 与@Resource的区别: 1、 @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2、 @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可

伍家岗区13569076830: springboot中怎么获取到原生的request -
邸官风湿: 1.通过注解获取(很简单,推荐): public class Hello { @Autowired HttpServletRequest request; //这里可以获取到request } 2.在web.xml中配置一个监听: org.springframework.web.context.request.RequestContextListener java代码

伍家岗区13569076830: spring boot不能用@repository注解吗 -
邸官风湿: @Repository代表仓库. 一般注解在DAO实现类上, 别人看代码时, 就知道这个类是一个跟数据存储有关的类. @repository还会封装dao层的异常转换成spring的异常

伍家岗区13569076830: spring boot在eclipse中怎么用 -
邸官风湿: 1.Eclipse中安装STS插件:Help -> Eclipse Marketplace… Search或选择“Popular”标签,选择Spring Tool Suite (STS) for Eclipse插件,安装:2.New -> Project… 找到Spring目录,选择Spring Starter Project,Next3、填写跟项目相关的各种信息...

伍家岗区13569076830: Springboot @RestController 请求不跳转返回字符串?
邸官风湿: 不可以,@RestController就是@Controller和@ResponseBody的结合,会直接返回方法中return的内容并转成json发到前台,无法跳转页面. 非要跳转的话也不是不行,你把页面url放到返回的参数里,在前端解析json中的地址,然后在前端跳转就完事了.

伍家岗区13569076830: 请教一个spring boot @Value注解问题 -
邸官风湿: public void getCsisUrl(){ Properties p = new Properties(); try{ FileInputStream in = new FileInputStream(ServletActionContext.getRequest().getRealPath("/WEB-INF/classes/demo.properties")); p.load(in); in.close(); String csisUrl= p.getProperty("...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网