关注△mikechen的架构笔记△,十余年BAT架构经验倾囊相授
大家好,我是mikechen。
SpringMVC注解是我们在Java开发经常使用到的,下面就给大家重点详解SpringMVC常用的9大注解@mikechen
最新mikechen原创超30万字《阿里架构师进阶专题合集》和《最全大厂面试题及答案总结》,请关注本公众号【mikechen的架构笔记】,后台回复:资料,即可领取。
@Controller注解
一个类上添加@Controller注解,表明了这个类是一个控制器类,类似Struts2中的Action。
在SpringMVC 中控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。
如下所示:
public class UserCotroller {
......
}
@RestController注解
RestController注解可以直接返回一个对象,配合fastjson,可以将对象转换为json字符串返回给前端。
具体示例如下:
public class UserController {
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 请求参数到控制器方法参数,即在处理方法入参处使用该注解,可以把请求参数传递给请求方法。
如下所示:
"requestParam" ) (
public String testRequestParam( (required=false) String name, ( "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;
public class 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( String macAddress){
//do something;
}
@PathVariable 绑定URL占位符到,比如:上面的例子绑定就是macAddress这个入参。
@ModelAttribute注解
@ModelAttribute最主要的作用是将数据添加到模型对象中,用于视图页面展示时使用。
@ModelAttribute等价于 model.addAttribute("attributeName", abc)。
如下所示:
public class HelloWorldController {
public void populateModel( String abc, Model model) {
model.addAttribute("attributeName", abc);
}
"/helloWorld") (value =
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;
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数据。
具体示例如下:
public class HelloWorld {
public String testSpringBoot() {
return "Hello SpringBoot 2 !";
}
}
以上
最后送大家一个福利:
送我原创超30万字阿里架构师进阶专题合集。
以及给大家整理最全大厂Java面试题及答案详解,包含:Java、多线程、JVM、Spring、MySQL、Redis、中间件...等必考题答案详解。
需要以上架构专题&面试答案的同学,加我微信即可领取!
添加时备注:资料