Spring MVC常用注解

一、Spring MVC 常用注解

1、@RequestMapping

Spring MVC 通过 @RequestMapping 注解将 URL 请求与业务方法进行映射,在控制器的类定义处以及方法定义处都可以添加 @RequestMapping,在类定义处添加相当于多了一层访问路径。

@Controller
@RequestMapping("/hello")
public class HelloHandler {

    @RequestMapping("/index")
    public String index(){
        System.out.println("接收到请求了");
        return "index";
    }
}

访问路径:http://localhost:8080/hello/index

@RequestMapping 常用参数
  • value:指定 URL 请求的实际地址,是 @RequestMapping 的默认值
  • method:指定请求的 method 类型,包括 GET、POST、PUT、DELETE 等。
@Controller
@RequestMapping("/hello")
public class HelloHandler {

    @RequestMapping(value = "/index",method = RequestMethod.POST)
    public String index(){
        System.out.println("接收到请求了");
        return "index";
    }
}

上述代码表示只有 POST 请求可以访问该方法,若使用其他请求访问,直接抛出异常,比如 GET。
在这里插入图片描述

  • params:指定 request 请求中必须包含的参数值,若不包含,无法调用该方法。
@Controller
@RequestMapping("/hello")
public class HelloHandler {

    @RequestMapping(value = "/index",method = RequestMethod.POST,params = {"id=1", "name=tom"})
    public String index(){
        System.out.println("接收到请求了");
        return "index";
    }
}

上述代码啊表示 request 请求中必须包含 name 和 id 两个参数,并且 id 的值必须为1,name 的值必须为tom,才可调用,否则抛出 400 异常。
访问路径为:http://localhost:8080/hello/index?id=1&name=tom

2、@RequestParam 参数绑定

如果需要在业务方法中获取 URL 的参数值,可以使用 @RequestParam 注解
1、在业务方法定义时声明参数列表
2、给参数列表添加 @RequestParam 注解进行绑定

@Controller
@RequestMapping("/hello")
public class HelloHandler {

    @RequestMapping(value = "/index",method = RequestMethod.POST)
    public String index(@RequestParam("num") Integer id,@RequestParam("str") String name){
        System.out.println("接收到请求了,参数是:id=" + id + ",name=" + name);
        return "index";
    }
}

请求路径:http://localhost:8080/hello/index?num=1&str=tom
输出结果:接收到请求了,参数是:id=1,name=tom
Spring MVC 可以自动完成数据类型转换,该工作是由 HandlerAdapter 来完成的。

3、Spring MVC 支持 RESTful 风格的 URL 参数获取

传统的 URL:http://localhost:8080/hello/index?num=1&str=tom
RESTful URL:http://localhost:8080/hello/index/1/tom

@RequestMapping("/restful/{id}/{name}")
public String restful(@PathVariable("id") Integer id, @PathVariable("name") String name){
   System.out.println(id + "-" + name);
   return "index";
}

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中。

4、映射Cookie

@CookieValue的作用:用来获取Cookie中的值

@RequestMapping("/cookie")
public String getCookie(@CookieValue("JSESSIONID") String sessionId){
     System.out.println(sessionId);
     return "index";
 }

输出结果:895AB5BA04AB4B038DDD859151C84C18

二、使用 POJO 绑定参数

Spring MVC 会根据请求参数名和 POJO 属性名进行匹配,自动为该对象填充属性值,并且支持属性级联。
创建实体类User:

package com.southwind.pojo;

import lombok.Data;

@Data
public class User {
    private Integer id;
    private String name;
    private Address address;
}
**加粗样式**

创建 Address 试题列:

package com.southwind.pojo;

import lombok.Data;

@Data
public class Address {
    private Integer code;
    private String name;
}

创建 addUser.jsp

<%--
  Created by IntelliJ IDEA.
  User: liquanpeng
  Date: 2021/12/16
  Time: 10:35 下午
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/hello/add" method="post">
    <table>
        <tr>
            <td>编号:</td>
            <td><input type="text" name="id"></td>
        </tr>
        <tr>
            <td>姓名:</td>
            <td>
                <input type="text" name="name">
            </td>
        </tr>
        <tr>
            <td>地址编号:</td>
            <td>
                <input type="text" name="address.code">
            </td>
        </tr>
        <tr>
            <td>地址信息:</td>
            <td>
                <input type="text" name="address.name">
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="提交">
            </td>
        </tr>
    </table>
</form>
</body>
</html>

Handler:

@RequestMapping("/add")
public String add(User user){
    System.out.println(user);
    return "index";
}

页面录入:
在这里插入图片描述

输出结果:
在这里插入图片描述
解决乱码问题:
如果出现中文乱码,可以通过配置过滤器来解决,在 web.xml 中添加配置即可。

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

加入过滤器后的输出结果:
在这里插入图片描述

三、JSP 页面的转发和重定向

Spring MVC 默认以转发的形式响应 JSP,可以手动进行修改。
重定向:

@RequestMapping("/redirect")
public String redirect(){
    System.out.println("重定向");
    return "redirect:/index.jsp";
}

设置重定向的时候不能写逻辑视图,必须写明资源的物理路径,如“redirect:/index.jsp”
转发:

@RequestMapping("/forward")
public String forward(){
    System.out.println("转发");
    return "forward:/index.jsp";
}

等同于

@RequestMapping("/forward")
public String forward(){
    System.out.println("转发");
    return "index";
}
  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值