SpringBoot 的 Controller 层常用注解

本文详细介绍了SpringBoot中@Controller、@RestController、@RequestMapping及其相关注解的用法,包括处理HTTP请求的方法如@PostMapping、@GetMapping,以及其他如@Api、@ApiOperation、@Autowired、@Resource、@Value等注解的用途和使用场景。此外,还讨论了如何通过这些注解进行异常处理和数据绑定。
摘要由CSDN通过智能技术生成

3. SpringBoot 中 Controller 层的注解

3.1 @Controller 注解

@Controller : 加在类上面的注解,使得类里面的每个方法都返回一个视图页面。

但是在实际开发中,我们一般只是让后端的方法返回给前端是查询的数据,而不是一个新的视图页面。如果使用 @Controller 注解必须结合 @ResponseBody,让这个方法返回给前端的不是一个视图,而只是给前端传递查询到的数据。

可以把 @ResponseBody 注解加到 Controller 类上或者是 Controller 层的方法上。

  • @ResponseBody 添加到类上:代表这个类中国所有的方法都返回的数据,而不是视图。

  • @ResponseBody 添加到方法上:代表只有这个方法返回的是数据,其他没有声明的返回的还是视图。


@Controller
public class HelloController {
​
@GetMapping(value="/hello")
@ResponseBody
public String say(){//返回json 数据  
    return "gril";
}
  
@GetMapping(value="/hello1")
public String say1(){//返回视图
    return "sys/index1";
}

为了解决这个麻烦的操作,SpringBoot 中提供了 @RestController 注解解决这个问题,如下:

3.2 @RestController

@RestController :从 Spring 4.0 以后产生的,用来将 json/xml数据发送到前台页面,而不是返回视图页面。它相当于 @Controller 和 @ResponseBody。

@RestController 加在类上面的注解,使得类里面的每个方法都将 json/xml 返回数据加返回到前台页面中。梭所以在实际开发中,我们一般都使用这个注解。

3.3 @RequestMapping("路径信息")

@RequestMapping("路径信息") :@RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些 URL 请求。这个注解可以使用在 Controller 层的类或者方法上。

@RequestMapping 中的参数:

  • path : 指定路径,和 value 没有区别,只是 path 不可以省略,value 可以省略。

3.3.1 注解在 Controller 类上

  • 将 @RequestMapping 注解在 Controller 类上,这时类的注解是相对于 Web 根目录,而方法上的是相对于类上的路径。

  • 注意: @RequestMapping("/index") 等同于 @RequestMapping(value = "/index")


@RestController
@RequestMapping("/user")
// @RequestMapping(value = "/user")
public class UserController {
 
    @RequestMapping("/login")
    public String login() {
        return "success";
    }
}
// 此时请求的实际路径是:/user/login
// 在类上的@RequestMapping相当于声明一个根路径,在请求的时候他会把类和方上的路径进行拼接

3.3.2 注解在 Controller 类的方法上

method 属性:

通过 method 属性来指定请求的类型:有 GET(查)、POST(增)、PUT(改)、DELETE(删),由于浏览器表单无法发送 DELETE 和 PUT 请求,如果使用的话需要进行处理,所以我们在开发中一般使用 CET 和 POST 请求方式完成请求任务。

  • 通过 @RequestMapping(value="/login",method=RequestMethod.GET) 来指定 login()方法 仅处理通过 GET 方式发来的请求


@RestController
@RequestMapping(path = "/user")
public class UserController {
    
    // 通过 method 属性来指定请求的类型,此时只能使用GET请求访问,使用POST会报错。
    @RequestMapping(path = "/login", method=RequestMethod.GET)
    public String login() {
        return "success";
    }
}

通过 @RequestMapping(value="/login",method=RequestMethod.POST) 来指定 login()方法 仅处理通过 POST 方式发来的请求


@RestController
@RequestMapping(path = "/user")
public class UserController {
 
    // 通过 method 属性来指定请求的类型,此时只能使用POST请求访问,使用GET会报错。
    @RequestMapping(path = "/login", method=RequestMethod.POST)
    public String login() {
        return "success";
    }
}

由于在 RequestMapping 注解类中 method() 方法返回的是 RequestMethod 数组,所以可以给 method 同时指定多个请求方式,例如


@RestController
@RequestMapping(path = "/user")
public class UserController {
     // 该方法将同时接收通过GET和POST方式发来的请求
    @RequestMapping(path = "/login", method={RequestMethod.POST,RequestMethod.GET})
    public String login() {
        return "success";
    }
}

params 属性:

  • @RequestMapping 的 params 属性,该属性表示请求参数,也就是追加在 URL 上的键值对,多个请求参数以 &隔开,例如:


http://localhost/SpringMVC/user/login?username=kolbe&password=123456

则这个请求的参数为 username=kolbe 以及 password=123456,@RequestMapping 中可以使用 params 来限制请求参数,来实现进一步的过滤请求,举个例子:


@Controller
@RequestMapping(path = "/user")
public class UserController {
        
     // 该方法将接收 /user/login 发来的请求,且请求参数必须为 username=kolbe&password=123456
    @RequestMapping(path = "/login", params={"username=kolbe","password=123456"})
    public String login() {
        return "success";
    }
}
  • 该例中则表示 UserController 中的 login() 方法仅处理 /user/login 发来的请求,且必须带有 username=kolbe&password=123456 的请求参数,否则浏览器将返回 HTTP 404 的错误。

headers 属性:

  • @RequestMapping 的 headers 属性,该属性表示请求头。

通过 @RequestMapping 中的 headers 属性,可以限制客户端发来的请求。 


@Controller
@RequestMapping(path = "/user")
public cl
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值