003-Spring MVC URL映射与参数绑定

@RequestMapping注解

可以作用在类和方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于定义每个Controller方法的执行url路径(还可以更细致为同一url不同的参数,不同的content-type执行不同的Controller方法)RequestMapping注解有以下几个重要属性:

属性名说明示例
value指定请求的实际地址,支持模糊匹配
1. ?:匹配一个字符
2. *:匹配任意字符
3. **:匹配多层路径
4. 正则匹配
5. URI 路径模式还可以具有嵌入的${…​}占位符,这些占位符在启动时通过配置文件针对本地、系统、环境和其他属性源进行解析
/springmvc/**/lastTest
匹配/springmvc/firstTest/secondTest/lastTest
method指定请求的http方法类型枚举类RequestMethod的任意类型。如RequestMethod.POST
consumes指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;我们还可以使用MediaType类中定义的static属性
produces指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回可以使用MediaType类中定义的static属性
params指定request中必须包含某些参数值时,才让该方法处理@GetMapping(path = “/pets/{petId}”, params = “myParam=myValue”)
参数myParam=myValue时才进入该Controller的此方法
headers指定request中必须包含某些指定的header值,才能让该方法处理请求@GetMapping(path = “/pets”, headers = “myHeader=myValue”)

@RequestMapping衍生注解

  • @GetMapping:对应method = RequestMethod.GET,以下同理
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

Spring MVC 中获取参数的方式

@RequestParam

常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String–> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值

用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST都可以

注解属性
  • value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;(同name属性)。
  • required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
  • defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties[‘java.vm.version’]}”
@RequestMapping("/add")
public String add(@RequestParam(name="name",required=true) String name){
     
    System.out.println(name);
     
    return "index";
}

如果参数名称和Controller方法中需要绑定的参数的名称一致,name或value属性可以不用设置。

@PathVariable

@Controller
@RequestMapping("/owners/{ownerId}")
public class OwnerController {

    @GetMapping("/pets/{petId}")
    public Pet findPet(@PathVariable Long ownerId, @PathVariable Long petId) {
        // ...
    }
}

@RequestHeader

您可以使用@RequestHeader注释将请求标头绑定到控制器中的方法参数
例如某个请求有如下请求头信息

Host localhost:8080 
Accept text/html,application/xhtml+xml,application/xml;q=0.9 
Accept-Language fr,en-gb;q=0.7,en;q=0.3 
Accept-Encoding gzip,deflate 
Accept-Charset ISO -8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 300

我们可以通过如下代码获取请求头的对应值

@GetMapping("/demo")
public void handle(
        @RequestHeader("Accept-Encoding") String encoding, 
        @RequestHeader("Keep-Alive") long keepAlive) { 
    //...
}

我们的token很多时候放在header,可通过此方式获取

@CookieValue

获取Cookie的值
例如:cookie的值如下

JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
@GetMapping("/demo")
public void handle(@CookieValue("JSESSIONID") String cookie) { 
    //...
}

一般情况下获取到的cookie的值都是String类型。

@ModelAttribute

@ModelAttribute一个具有如下三个作用:

  • 绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;

绑定请求参数到命令对象

@PostMapping("/owners/{ownerId}/pets/{petId}/edit")
public String processSubmit(@ModelAttribute Pet pet) {
    // method logic...
}

示例是参数在url上,也可以绑定表单提交

@SessionAttributes & @RequestAttributes

绑定session或request作用域的attribute属性

@Controller
@SessionAttributes("pet") // pet的值会被自动提升保存在Http Servlet中
public class EditPetForm {

    // ...

    @PostMapping("/pets/{id}")
    public String handle(Pet pet, BindingResult errors, SessionStatus status) {
        if (errors.hasErrors) {
            // ...
        }
            status.setComplete(); // 使用SessionStatus的setComplete方法清除存储的值
            // ...
        }
    }
}

在第一个请求中,当一个名为 , 的模型属性pet被添加到模型中时,它会自动提升并保存在 HTTP Servlet 会话中。它一直存在,直到另一个控制器方法使用SessionStatus方法参数来清除存储。

此两种方式使用得很少,一般情况下我们都是使用HttpRequest或HttpSession对象来操作。

    @RequestMapping("/")
    public String hello(@RequestParam(required = false) String name, HttpServletRequest request,
                        HttpServletResponse response, HttpSession session){
        System.out.println(request);
        System.out.println(response);
        System.out.println(session);
        return "Hello World!";
    }

可以看到我们直接在Controller方法上定义request等参数SpringMVC自动为我们注入了值。

@RequestBody

前后端分离的项目最常用的注解。用于从请求体绑定前端发送的Object对象参数。一般是前端ajax通过json对象提交的参数,后端需要使用该注解来绑定

@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
    // ...
}

上一篇:002-Spring MVC流程解析
下一篇:004-SpringMVC参数类型转换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVC(Model-View-Controller)是一种软件设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。这种模式的目的是使应用程序的不同部分之间的职责更加清晰,从而提高代码的可维护性和可扩展性。 在MVC中,模型表示应用程序数据和业务逻辑,视图显示数据和用户界面,控制器接收和处理用户输入,并更新模型和视图。这种分离使得修改应用程序的某个部分时,不会影响其他部分的代码。 Spring MVC是一个MVC框架,它基于Java Servlet API实现,并且提供了很多工具和类来简化Web应用程序的开发。Spring MVC的核心是DispatcherServlet,它接收所有的HTTP请求,并将它们分派到相应的控制器进行处理。 要搭建Spring MVC开发环境,需要进行以下步骤: 1. 配置web.xml文件,将DispatcherServlet映射到相应的URL上。 2. 配置Spring MVC的配置文件,包括义控制器、视图解析器、拦截器等。 3. 编写控制器类,处理请求并返回相应的视图。 Spring MVC中请求的响应与请求参数方法有以下几种: 1. @RequestParam注解:将请求参数到控制器方法的参数上。 2. @PathVariable注解:将URL路径变量到控制器方法的参数上。 3. @ModelAttribute注解:将请求参数到控制器方法的JavaBean对象上。 4. @RequestBody注解:将请求体中的数据到控制器方法的参数上。 通过使用这些注解,可以轻松地处理HTTP请求,并将请求参数到控制器方法的参数上,从而简化了开发过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值