SpringMVC注解是我们在Java开发经常使用到的,下面就给大家重点详解SpringMVC常用注解@mikechen
@Controller注解
一个类上添加@Controller注解,表明了这个类是一个控制器类,类似Struts2中的Action。
在SpringMVC 中控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。
如下所示:
@Controller public class UserCotroller { ...... }
@RestController注解
RestController注解可以直接返回一个对象,配合fastjson,可以将对象转换为json字符串返回给前端。
具体示例如下:
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/test") public Map addGoodsToCartList(Long itemId, Integer num) { Map map = new HashMap(); map.put("success", true); map.put("message", "welcome"); return map; } }
@requestParam注解
@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”)。
用 @RequestParam 绑定 HttpServletRequest 请求参数到控制器方法参数,即在处理方法入参处使用该注解,可以把请求参数传递给请求方法。
如下所示:
@RequestMapping ( "requestParam" ) public String testRequestParam( @RequestParam(required=false) String name, @RequestParam ( "age" ) int age) { return "requestParam" ; }
在上面代码中利用@RequestParam 从HttpServletRequest 中绑定了参数name 到控制器方法参数name ,绑定了参数age 到控制器方法参数age 。
它有三个常用参数:defaultValue = “0”, required = false, value = “isApp”
- defaultValue:表示设置默认值;
- required:通过boolean设置是否是必须要传入的参数;
- value :表示接受的传入的参数类型;
@RequestMapping注解
在SpringMVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置。
该注解有六个属性:
- params:指定request中必须包含某些参数值是,才让该方法处理;
- headers:指定request中必须包含某些指定的header值,才能让该方法处理请求;
- value:指定请求的实际地址,指定的地址可以是URI Template 模式;
- method:指定请求的method类型, GET、POST、PUT、DELETE等;
- consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
- produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
如下所示:
package com.springmvc.helloworld_1; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping(value="/example") public class HelloWorld { @RequestMapping("/helloworld") public String hello(){ System.out.println("hello world"); return "success"; } }
上面代码在类定义处指定映射为”/example”,在hello()方法处指定为”/helloworld”,那么hello()方法的URL映射地址为:
http://localhost:8080/springMVC/example/helloworld
如果去掉类定义处的@RequestMapping(value=”/example”),那么hello()方法的映射地址就变为了:
http://localhost:8080/springMVC/helloworld
@PathVariable注解
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出URL模板中的变量作为参数。
如下所示:
RequestMapping("user/get/mac/{macAddress}") public String getByMacAddress(@PathVariable String macAddress){ //do something; }
@PathVariable 绑定URL占位符到,比如:上面的例子绑定就是macAddress这个入参。
@ModelAttribute注解
@ModelAttribute最主要的作用是将数据添加到模型对象中,用于视图页面展示时使用。
@ModelAttribute等价于 model.addAttribute(“attributeName”, abc)。
如下所示:
@Controller public class HelloWorldController { @ModelAttribute public void populateModel(@RequestParam String abc, Model model) { model.addAttribute("attributeName", abc); } @RequestMapping(value = "/helloWorld") public String helloWorld() { return "helloWorld"; } }
这个例子,在获得请求/helloWorld 后,populateModel方法在helloWorld方法之前先被调用,它把请求参数(/helloWorld?abc=text)加入到一个名为attributeName的model属性中,在它执行后 helloWorld被调用,返回视图名helloWorld和model已由@ModelAttribute方法生产好了。
@AutoWired注解
@autowired注解,来源于英文单词autowire,这个单词的意思是自动装配的意思。
@AutoWired注解的作用:主要就是把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
具体示例,比如用于set方法上:
public class SimpleMovieLister { private MovieFinder movieFinder; @Autowired public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } // ... }
@Component注解
@component是spring中的一个注解,它的作用就是实现bean的注入。
在Java的web开发中,提供3个@Component注解衍生注解分别是:
1)@Controller 控制器注入服务,用于标注控制层;
2)@Service 服务注入dao,用于标注服务层,主要用来进行业务的逻辑处理;
3)@Repository实现dao访问,用于标注数据访问层,即DAO组件;
而@Component泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
@ResponseBody注解
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
具体示例如下:
@Controller public class HelloWorld { @RequestMapping("/hello") @ResponseBody public String testSpringBoot() { return "Hello SpringBoot 2 !"; } }
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》