9大SpringMVC常用注解详解(建议收藏)

文摘   2024-09-19 12:59   四川  

关注mikechen的架构笔记十余年BAT架构经验倾囊相授


大家好,我是mikechen。

SpringMVC注解是我们在Java开发经常使用到的,下面就给大家重点详解SpringMVC常用的9大注解@mikechen


最新mikechen原创超30万字《阿里架构师进阶专题合集》和《最全大厂面试题及答案总结》,请关注本公众号【mikechen的架构笔记】,后台回复:资料,即可领取。


@Controller注解

一个类上添加@Controller注解,表明了这个类是一个控制器类,类似Struts2中的Action。

在SpringMVC 中控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。

如下所示:

@Controllerpublic 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中配置。

该注解有六个属性:

  1. params:指定request中必须包含某些参数值是,才让该方法处理;

  2. headers:指定request中必须包含某些指定的header值,才能让该方法处理请求;

  3. value:指定请求的实际地址,指定的地址可以是URI Template 模式;

  4. method:指定请求的method类型, GET、POST、PUT、DELETE等;

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

  6. 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)。

如下所示:

@Controllerpublic 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数据。

具体示例如下:

@Controllerpublic class HelloWorld {    @RequestMapping("/hello")    @ResponseBody    public String testSpringBoot() {        return "Hello SpringBoot 2 !";    }}


以上


最后送大家一个福利:

送我原创超30万字阿里架构师进阶专题合集


以及给大家整理最全大厂Java面试题及答案详解,包含:Java、多线程、JVM、Spring、MySQL、Redis、中间件...等必考题答案详解。


需要以上架构专题&面试答案的同学,加我微信即可领取!


添加时备注:资料






mikechen的架构笔记
十余年BAT架构经验倾囊相授!
 最新文章