美文网首页
5. Spring MVC: Controller 及Restf

5. Spring MVC: Controller 及Restf

作者: Messix_1102 | 来源:发表于2022-02-01 09:46 被阅读0次

控制器Controller

  1. 控制器负责提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。
  2. 控制器负责解析用户请求,并将其转换为一个模型。
  3. 在SpringMVC中一个控制器可以包含多个方法。
  4. 在SpringMVC中,对于Controller的配置方式有很多种。

Controller 实现方式一:实现Controller接口

Controller是一个接口,在org.spring.framework.web.servlet.mvc包下,接口中只有一个方法:

// 实现该接口的类就可以获得控制器功能
public interface Controller {
    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

测试:

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 实现了Controller接口的类,说明这个类就是一个控制器了
public class ControllerTest1 implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "ControllerTest1");
        mv.setViewName("test");
        return mv;
    }
}
  • 实现接口Controller定义控制器是较老的方法
  • 缺点是一个控制器只有一个方法,如果要多个方法定义则需要定义多个Controller,定义方式比较麻烦。

Controller 实现方式二:使用@Controller注解

  • @Controller 注解类型用于声明Spring类的实例是一个控制器
  • Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。
<context:component-scan base-package="com.test.controller"/>

测试:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller // 代表这个类被Srping接管,被这个注解的类中的所有方法,如果返回值是String,并且有具体页面,那么就会被视图解析器解析
@RequestMapping("/test2")
public class ComtrollerTest2 {
    @RequestMapping("/index")
    public String index(Model model){
        model.addAttribute("msg", "ControllerTest2");
        return "test";
    }
}

@RequestMapping

  • @RequestMapping 注解用于映射URL到控制器或者一个特定的方法。可用于类或者方法上面。
  • 最终访问路劲为 host + 类路径 + 方法路径

@Restful 风格

定义Http请求方式,括号传参定义路由和参数
@GetMapping 定义Get请求
@PostMapping 定义Post请求
@PutMapping 定义Put请求
@DeleteMapping 定义Delete请求
@PatchMapping 定义Patch请求
@RequestMapping 可设定请求路径、传参、和Http请求方式
@PathVariable 表示参数可以被路由传参,和@RequestMapping 搭配使用

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

@Controller
public class RestfulController {
    // 原来传参:http://localhost:8080/add?a=1&b=2
    // Restful:http://localhost:8080/add/1/2

    // 原来Mapping @RequestMapping("/add")
    //@RequestMapping(path="/add/{a}/{b}", method = RequestMethod.GET)
    //@PathVariable 表示参数可以被路由传参
    @GetMapping ("/add/{a}/{b}")
    public String test(@PathVariable int a, @PathVariable int b, Model model){
        int res = a + b;
        model.addAttribute("msg", "test res = " + res);
        return "test";
    }

    // 只能用Post method提交
    @PostMapping("/add/{a}/{b}")
    public String test2(@PathVariable int a, @PathVariable int b, Model model){
        int res = a + b;
        model.addAttribute("msg", "test2 res = " + res);
        return "test";
    }

    @RequestMapping("/form")
    public String test2(Model model){
        return "form";
    }
}

下面两种方式结果一样

  • @RequestMapping(path="/add/{a}/{b}", method = RequestMethod.GET)
  • @GetMapping ("/add/{a}/{b}")

相关文章

网友评论

      本文标题:5. Spring MVC: Controller 及Restf

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