springboot基础(69):Controller相关注解

前言

controller相关的注解的使用和解释

1. 常用controller注解列表

可能未列全,但是这些是常见的controller注解

名称作用作为位置
@Controller处理http的请求ElementType.TYPE
@ResponseBody将方法的返回值作为body进行返回ElementType.METHOD,ElementType.TYPE
@RestControllerRestful请求风格,返回方法的返回值,常用于返回json格式内容,底层是@Controller和@ResponseBody的组合ElementType.TYPE
@RequestMapping通用请求,不区分是GET/POST还是PUT之类的ElementType.METHOD
@GetMappingGet请求,底层是@RequestMapping(method = {RequestMethod.GET})ElementType.METHOD
@PostMappingPost请求,底层是@RequestMapping(method = {RequestMethod.POST})ElementType.METHOD
@PutMappingPUT请求,底层是@RequestMapping(method = {RequestMethod.PUT})ElementType.METHOD
@DeleteMappingDelete请求,底层是@RequestMapping(method = {RequestMethod.DELETE})ElementType.METHOD
@PathVariable获取url参数ElementType.PARAMETER
@RequestParam获取请求参数ElementType.PARAMETER

2. Controller注解

2.1 @Controller

@Controller是万能的注解,可以进行地址跳转,文件的下载,也可以与@ResponseBody组合,变成@RestController
例如 使用@Controller导出文件

/**
 * 导出excel
 */
@Controller
public class ExportExcelController {

    @RequestMapping("/exportExcel")
    public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
        List<String> headList = Arrays.asList("姓名", "地址");
        List<LinkedHashMap<String, Object>> dataList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            LinkedHashMap<String, Object> map = new LinkedHashMap<>();
            map.put("姓名", "张三" + i);
            map.put("地址", "北京" + i);
            dataList.add(map);
        }

        ExcelExportUtils.exportExcel(headList, dataList, "学生名单1", "某校学生名单", response);
    }
}

2.2 @RestController

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    @GetMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name){
        return "hello "+name;
    }

在这里插入图片描述
我们改用@Controller,再运行进行请求则会报错,@RestController表示将方法的返回值作为body返回。
在这里插入图片描述
在这里插入图片描述
我们对方法添加@ResponseBody注解,再次执行代码,则运行正常。
在这里插入图片描述

在这里插入图片描述

@ResponseBody:该注解即可添加在方法上,也可以添加在类上

3. 请求类型注解

3.1 @RequestMapping

不限制请求的类型是GET、POST、PUT、DELETE 等,属于通用型的请求。使用@RequestMapping时,swagger 显示API时会出现重复。
示例

    @RequestMapping("/sayHello2/{name}")
    public String sayHello2(@PathVariable("name") String name){
        return "hello2 "+name;
    }

3.2 @GetMapping

只能接收客户端发出的GET请求

    @GetMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name){
        return "hello "+name;
    }

在这里插入图片描述

3.3 @PostMapping

只能接收客户端发送的POST请求

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    @PostMapping("/save")
    public String save(User user) {
        log.info("save方法打印内容:" + JSON.toJSONString(user));
        return "ok";
    }
}

在这里插入图片描述

3.4 @PutMapping

只接收PUT请求。
demo略。
在这里插入图片描述

3.5 @DeleteMapping

只接收Delete请求。
demo略。
在这里插入图片描述

4. 参数注解

4.1 @PathVariable

从请求的Path(路径,就是url路径)中获取参数,示例:

 @GetMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name){
        return "hello "+name;
    }

在这里插入图片描述

在这里插入图片描述

4.2 @RequestParam

RequestParam是指从request对象里获取参数,就是我们传统的request.getParameter(“name1”)一样,不区分请求类型,等价于下面这样的代码。

request.getParameter("name1");
request.getParameter("name2");
    @PostMapping("/testInsert")
    public String testInsert(@RequestParam("name1")String name1, @RequestParam("name2")String name2){
        log.info("name1:"+name1);
        log.info("name2:"+name2);
        return "ok";
    }

在这里插入图片描述
在这里插入图片描述

4.3 接收对象

参数接收可以缺省注解,直接在方法括号内接收即可。

    @PostMapping("/testUser")
    public String testUser(User user){
        log.info(JSON.toJSONString(user));
        return "ok";
    }

在这里插入图片描述

4.4 缺省接收参数

我们可以不设置注解,直接接收参数,显然在方法内接收参数,我们并没有使用@PathVariable和@RequestParam,直接缺省,同样可以获取到请求的参数。

@GetMapping("/testUser2")
    public String testUser2(String name){
        log.info("get "+name);
        return "ok";
    }
    @PostMapping("/testUser3")
    public String testUser3(String name){
        log.info("post "+name);
        return "ok";
    }

在这里插入图片描述

4.5 required是否必传

@PathVariable和@RequestParam都支持自行设定参数是否必须,默认都是必传。
在这里插入图片描述
在这里插入图片描述
示例,name1非必传

@RequestParam(value = "name1",required = false)String name1
    @PostMapping("/testInsert")
    public String testInsert(@RequestParam(value = "name1",required = false)String name1, @RequestParam("name2")String name2, HttpServletRequest request){
        request.getParameter("name1");
        request.getParameter("name2");
        log.info("name1:"+name1);
        log.info("name2:"+name2);
//        userService.insertTest(name1,name2);
        return "ok";
    }

5. 返回内容

5.1 @RequestBody

如果使用@RestController,它本身就是@Controller和@@RequestBody的组合。
@RequestBody 返回方法的返回值,而不是将其进行解析成跳转路径等信息。
@RequestBody 添加在方法上,表示将该方法的返回内容输出的前端。
@RequestBody 添加在类上,表示这个类的每个方法都被作用到,等同于将@RequestBody添加在每个方法上。
举个例子:
下面这段代码,使用@Controller 则,而不使用@RequestBody,表示页面跳转到index2.html页面

@Controller
public class HelloController {
    @RequestMapping("/")
    public String hello(){
        return "forward:index2.html";
    }
}

在这里插入图片描述

在这里插入图片描述

如果添加@RequestBody,访问这个链接,则直接输出return的字符串
在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值