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

2022-01-11  本文已影响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中,即请求体中。

上一篇下一篇

猜你喜欢

热点阅读