SpringBoot笔记:控制类Controller

一个类想要变成控制类,只需要在类上加一个@Controller注解即可,其作用为指定请求路径及其对应的处理方法。

一、请求路径和传参

常用注解 :可以直接使用@RequestMapping、@PostMapping、@GetMapping、@PutMapping、@DeleteMapping等注解指定某个方法对应的请求路径,从注解的名称其实就可以看出来,除了第一个注解是可以自定义请求方式的,后面的几个注解的请求方式都已经写死了。

指定请求路径 :以注解@RequestMapping为例,在对应的方法上使用注解 @RequestMapping(value = "/string-demo", method = RequestMethod.GET) 指定请求路径,指定之后,在浏览器输入 http://localhost:8080/string-demo 即可访问。这个注解也可以放在类上,此时指定的请求路径就表示这个类下的所有方法请求路径的前缀了,一个方法最终的完整请求路径就会是“类+方法”的请求路径了。另外,如果method参数不指定的话,这个方法将接收所有满足条件的请求。

接收请求body :@PostMapping这类请求方式如果需要接收请求body,那么需要在对应的方法参数上使用@RequestBody注解进行接收。

接收查询参数 :在请求路径中定义的查询参数,直接在方法中定义一个同名的参数即可。

接收path参数 :如果在url中定义了path参数,那么需要在对应的方法参数上使用@PathVariable注解进行接收。

package com.yun.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

// 指定控制类
@Controller
// 指定url前缀
@RequestMapping(value = "/hello")
public class MvcDemoController {
    // 浏览器访问:http://localhost:8081/hello/string-demo
    @RequestMapping(value = "/string-demo", method = RequestMethod.GET)
    // 自动解析返回值到浏览器
    @ResponseBody
    public String stringDemo() {
        return "String demo";
    }

    // 此url只能使用POST请求方式访问
    @PostMapping(value = "/object-demo")
    @ResponseBody
    // 使用@RequestBody接收请求body
    public Object objectDemo(@RequestBody Object body) {
        return body;
    }

    // 浏览器访问:http://localhost:8080/hello/world?message=zhangsan
    @RequestMapping(value = "/world")
    @ResponseBody
    // 使用同名的参数接收url中的查询参数
    public String hello(String message) {
        return "Hello " + message;
    }

    // 指定path参数
    @RequestMapping(value = "/{name}")
    @ResponseBody
    // 使用注解@PathVariable接收path参数
    public String pathDemo(@PathVariable("name") String name) {
        return "Hello " + name;
    }
}

二、返回值类型

RESTful编程 :如果想要某个方法返回json格式数据,只需要在该方法上加上注解@ResponseBody即可,表示根据返回值类型,自动解析返回值为json格式数据到前端,返回值类型通常有String、Object、Map,也可以将返回值统一定义为Object类型,@ResponseBody注解都可以自动解析后返回。如果想要整个Controller类的所有方法都返回json格式数据,只需要将注解@Controller替换为@RestController即可,该类下的所有方法就不用再使用注解@ResponseBody了。

package com.yun.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping(value = "/hello")
public class MvcDemoController {
    @RequestMapping(value="/map-demo")
    @ResponseBody
    public Map<String, Object> mapDemo() {
        HashMap<String, Object> responseMap = new HashMap<>();
        responseMap.put("message", "Map demo");
        return responseMap;
    }
}
posted @ 2022-11-02 12:49  山上下了雪-bky  阅读(497)  评论(0编辑  收藏  举报