SpringMVC常用注解(9大最常用注解详解)

SpringMVC常用注解(9大最常用注解详解)-mikechen

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

@Controller注解

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

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

如下所示:

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

该注解有六个属性:

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

如下所示:

@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面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法