springboot控制器常用注解

142 阅读4分钟

控制器

在springMVC中,控制器负责处理由DispatcherServlet接收并分发过来的请求,他把用户要请求的数据封装成一个model,然后把该model返回给对应的view进行展示

常用注解

@Controller 表示该类为控制器类

@RequestMapping("/XXX",method = RequestMethod.XXX) 映射url,返回值为templates下的html文件名

将该注解标注在类上,表示类中所有的响应请求的方法都将以该地址作为父路径

@GetMapping("url") = @RequestMapping("url",method = RequestMethod.GET)

常用于传递小型分散数据并刷新界面

@PostMapping("url") = @RequestMapping("url",method = RequestMethod.POST)

常用于传递JSON对象,插入数据

@PutMapping("url") = @RequestMapping("url",method = RequestMethod.GET)

常用于传递JSON对象,更新数据

@DeleteMapping("url") = @RequestMapping("url",method = RequestMethod.DELETE)

常用于传递JSON对象,删除数据

@Autowired 完成自动按类型装配 ,常用于服务类,使其成为单例静态对象

@Resource完成自动先按照名称,再按类型进行装配,常用于配置类

@ResponseBody 将控制器下的方法返回值改为json或string格式返回(不加则返回html文件)

@RestController( = @Controller+@ResponseBody)

@RequestParam(XXX) 写在变量前面,表示将前端post的json对象匹配XXX获得具体属性,赋值给注解后面的形参(参考极简实例中的登录界面(1)post方法控制器类被注释的代码)

@ModelAttribute("XXX"):应用在有返回值的方法上,相当于将该方法的返回值添加到model的"XXX"属性上

@ModelAttribute :应用在形参上,说明了该方法参数的值将由model中取得。如果model中找不到,那么该参数会先被实例化,然后被添加到model中。在model中存在以后,请求中所有名称匹配的参数都会填充到该参数中(参考极简实例中的登录界面(1))

重定向

return "redirect:/first"; //url变为/first

return "redirect:/second"; //url不变

get请求和post请求

get请求:请求参数会添加到请求资源路劲的后面,只能添加少量参数(只能存放小于2K的数据)[/xxxx?account=xxxxx&password=xxxxx]

请求参数会显示在浏览器地址栏,路由器会记录请求地址

post请求: 请求参数添加到实体内容JSON里面,可以添加大量的参数,

相对安全,但是,post请求不会对请求参数进行加密处理(可以使用https协议来保证数据安全)

相关链接:blog.csdn.net/linjpg/arti…

@Autowired和@Resource的区别

@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

@Autowired(这个注解属业spring的)默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)。如果要使用名称装配可以结合@Qualifier注解进行使用

@Autowired () @Qualifier ( "baseDao" )
private BaseDao baseDao;

@Resource(这个注解属于J2EE的),默认先按照名称, 再按类型进行装配。如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

总结:一般像服务类等都用Autowired,相当于将服务类单例化。如果是需要将实例化后的对象在不同类间传递,则用Resource

相关链接:blog.csdn.net/weixin_4042…

Model和HttpSession

(局部变量)model:可以将数据放入视图中,数据只能在Controller返回的页面使用,其他页面不能使用。spring中model缓存的值是保存在request的getAttribute里面。当调用controller里面某个@requestmapping注解的方法,都能取到这个model里面的值。

(全局变量)session:session 里放的数据保存在服务器,可以供其他页面使用,只要用户不退出或者SESSION过期,这个值
就一直可以保留。在当前的 request周期之内,调用getAttribute方法同样也可以得到。

相关链接:blog.csdn.net/Hello_ChenL…

postmapping和putmapping

引入概念:幂等性(idempotent),简单来说就是多次访问对rest服务产生的结果不会有改变。

http协议明确规定,put、get与delete请求都是具有幂等性的,而post为非幂等性请求,就是说接口被定义为post请求可访问时,说明这个接口对数据库的影响是非幂等性的。所以一般插入新数据时,用post方法,更新数据库时,用put方法,以此类推@PostMapping注解是标示接口为非幂等性接口,@PutMapping注解是标示接口为幂等性接口。

如果执行添加操作, 后面的添加请求不会覆盖前面的请求, 所以使用@Postmapping

如果执行修改操作, 后面的修改请求会把前面的请求给覆盖掉, 所以使用@PutMapping

相关链接:blog.csdn.net/weixin_3823…