美文网首页
SpringBoot篇 - Controller中常用的注解简介

SpringBoot篇 - Controller中常用的注解简介

作者: 乘风破浪的姐姐 | 来源:发表于2022-01-11 12:48 被阅读0次

    SpringBoot的Controller中经常会用到注解@Controller、@RestController、@RequestMapping、@RequestParam、@PathVariable、@RequestBody等,以下针对这些注解简单使用。

    1.@Controller

    @Controller 定义了一个控制器类,它需要配合使用@RequestMapping 注解的方法才是真正处理请求的处理器。
    使用此注解返回的不是Json数据,而是页面类数据。
    例如:
    先在pom.xml中添加依赖

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
     </dependency>
    

    然后在resources目录下新建templates目录,并且在templates目录下创建hello.html文件。
    最后创建HelloController

    @Controller
    @RequestMapping("/test")
    public class HelloController {
    
        @RequestMapping(value = "/hello")
        public String sayHello() {
            System.out.println("hello world");
            return "hello";
        }
    }
    

    启动服务,访问localhost:8080/test/hello,页面跳转到hello.html页面。

    2.@RestController

    使用@RestController注解的方法表示一个控制器,返回json。原来返回一个json需要@Controller和@RequestBody配合使用。
    例如:

    @RestController
    @RequestMapping("/jdbc")
    public class JdbcController {
    
        @Autowired
        JdbcTemplate jdbcTemplate;
    
        @RequestMapping("/select")//http://localhost:8080/jdbc/select?memberNo=20211123146
        public List<Map<String,Object>> memberList1(@RequestParam("memberNo") String memberNo){
            String sql="select  *   from member tdmi where tdmi.member_no='"+memberNo+"'";
            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
             return maps;
        }
    }
    

    启动服务,访问http://localhost:8080/jdbc/select?memberNo=20211123146,返回:

    [
        {
            "member_id": 5,
            "shop_id": 9730231,
            "member_no": "20211123146",
            "mobile": "18727460505",
            "open_id": "#zssyd4U4J3p+czzXkwg+ZQ=="
        }
    ]
    

    3.@RequestMapping

    @RequestMapping可以使用在类上,也可以使用在方法上。
    而@GetMapping/@PostMapping 其实就是@RequestMapping和Get/Post的集合
      @GetMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.GET)
    @PostMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.POST)

    4.@RequestParam

    @RequestParam用于获取查询参数。格式为:url?name=AAA
    例如:

    @RestController
    @RequestMapping("/jdbc")
    public class JdbcController {
    
        @Autowired
        JdbcTemplate jdbcTemplate;
    
        @GetMapping("/select")
        public List<Map<String,Object>> memberQuery(@RequestParam("memberNo") String memberNo){
            String sql="select  *   from member tdmi where tdmi.member_no='"+memberNo+"'";
            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
             return maps;
        }
    }
    

    启动服务,访问http://localhost:8080/jdbc/select?memberNo=20211123146 即可。

    5.@PathVariable

    通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。即获取路径参数。格式为:url/{id}
    例如:

    @PostMapping("/select/{memberNo}")
        public List<Map<String,Object>> memberList2(@PathVariable("memberNo") String memberNo){
            String sql="select  *   from member tdmi where tdmi.member_no='"+memberNo+"'";
            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
            return maps;
        }
    

    启动服务,访问 http://localhost:8080/jdbc/select/20211123146 即可。

    6.@RequestBody

    @RequestBody传递的需要是对象
    示例1:

     @PostMapping("/memberPost1")
      public  Member paramTest1(@RequestBody Member member){
            System.out.println(member);
            return member;
        }
    

    启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost1即可。查看控制台输出:
    Member(memberId=5, shopId=9730231, memberNo=20211123146, mobile=18727460505, openId=#zssyd4U4J3p+czzXkwg+ZQ==)

    image.png

    示例2:

       @PostMapping("/memberPost2")//http://localhost:8080/jdbc/memberPost2
        public  Map<String,Object> paramTest2(@RequestBody Map<String,Object> member){
            System.out.println(member);
            return member;
        }
    

    启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost2即可

    image.png

    示例3:不使用注解

    @PostMapping("/memberPost3")//http://localhost:8080/jdbc/memberPost3
        public List<Member> paramTest3(Member member){
            System.out.println(member);
            List<Member> list = new ArrayList<>();
            list.add(member);
            return list;
        }
    

    启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost3,并在postman的form-data中分别传入key-value

    image.png

    总结:
    如果要在Controller层返回一个页面,用注解@Controller;如果让其作为一个接口,用@RestController
    在GET请求中(@GetMapping),不能使用@RequestBody。
    在POST请求(@PostMapping),可以使用@RequestBody和@RequestParam
    @RequestParam注解接受的参数来源于url中,格式为xxx?username=aa&password=456,而@RequestBody注解接收的参数则是来自于requestBody中,即请求体中。

    相关文章

      网友评论

          本文标题:SpringBoot篇 - Controller中常用的注解简介

          本文链接:https://www.haomeiwen.com/subject/pssbcrtx.html