Spring MVC接受请求和请求时日期的处理

Spring MVC接受请求和请求时日期的处理,第1张

Spring MVC接受请求和请求时日期的处理 Spring MVC接受请求

● @RequestMapping 它的作用就是与请求相匹配,如果匹配上了,所修饰的方法才会被执行。
例如:
@RequestMapping(path = “/admin”)发过来的请求就要找这个admin的路径。

● 在日常的使用过程中,我们只要关注两个属性就可以了:

◆ value :(它是 path 的别名)意为请求的路径,这个路径相对于应用的上下文。类型是 一个 String[] ,可以理解为数组。也就是说它可以匹配多个请求路径。
例如: @RequestMapping(value = {"/test","/test2"}),通过test和test2都是可以访问到的。

◆ method: 请求的方法。我们知道 HTTP 协议的请求方式是有 GET 和 POST。或者使用
@GetMapping, @PostMapping
这个两个标签替换@RequestMapping标签,他们就分别表示了GET和POST的请求。

当前的请求只有与@RequestMapping 上指定的属性都匹配的时候,才会执行它所标注的方法。

下面分析几个例子:
①:@RequestMapping(value = “/admin”)请求的方式是没有限制的。即可以是 GET 也可以是 POST,还能是其它的几个。

②:@RequestMapping(value = “/admin”, method = RequestMethod.GET) method给出了请求路径。请求方式只能是 GET。

③:@RequestMapping(value="/admin", method={ RequestMethod.GET , RequestMethod.POST}) method是String[]型的,所以也可以定义多个,这定义的请求方式就只能是 GET 或者 POST。

④:@GetMapping(value = “/test”)接受的都是GET的请求

⑤:@PostMapping(value = “/test”)接受的都是POST的请求

获取请求数据

我们编写处理器方法的目的,就是为了处理客户端提交的数据,而客户端的提交是按照 HTTP 协议报文格式来提交的,下面我们分析一段常见的 HTTP 提交的报文来理解报文的各个部分与处理器方法参数的对应关系:

先大概写个页面代码:




    
    Title


    admin

    


GET请求:

  1. 最老式的获取请求数据的方式:(不用了)
    参数列表中就直接内置HttpServletRequest,HttpSession,HttpServletResponse 等对象. 使用 request 对象也可以接收
package com.wang.ssm.controller;

import com.wang.ssm.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

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

@Controller//表示这个类是一个控制层的类,只能在类上添加,表示Spring生成此类的对象
@RequestMapping(path = "/admin")//请求映射,表示路径,也可以添加到方法上面去,提供的是一个映射地址
// 在类上标记映射地址时,整个应用程序中不能重复
//这两个标签是输入Spring MVC的标签内容
public class AdminController {

    @Autowired//Spring的标签,表示将对象注入进来
    AdminService adminService;

    //SpringMVC可以将HttpServletRequest,HttpServletResponse直接注入到我们的方法当中
    @GetMapping(value = "/getAdmin")
    public void getAdmin(HttpServletRequest request, HttpServletResponse response){
        System.out.println(request.getParameter("id"));
        System.out.println(request.getParameter("name"))
    }
}

点击超链接就可以获得选中这个get请求的发过来的数据:

使用SpringMVC框架中提供的方法使用

  1. 如果请求的数据和后端接受的名字不一样,可以用
    ● @RequestParam(“id”) Integer adminId
    RequestParam中的是前端发来请求的键名,adminId是后端接受的命名
    ● @RequestHeader(“User-Agent”) String userAgent接受的请求头中的数据
package com.wang.ssm.controller;

import com.wang.ssm.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

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

@Controller//表示这个类是一个控制层的类,只能在类上添加,表示Spring生成此类的对象
@RequestMapping(path = "/admin")//请求映射,表示路径,也可以添加到方法上面去,提供的是一个映射地址
// 在类上标记映射地址时,整个应用程序中不能重复
//这两个标签是输入Spring MVC的标签内容
public class AdminController {

    @Autowired//Spring的标签,表示将对象注入进来
    AdminService adminService;

    @GetMapping(value = "/getAdmin")
    public void getAdmin(@RequestParam("id") Integer adminId,
                         @RequestParam("name") String adminName,
                         @RequestHeader("User-Agent") String userAgent){
        System.out.println(adminId);
        System.out.println(adminName);
        System.out.println(userAgent);
    }
}

结果:
如果请求参的名与处理器方法的参数名称相同,那么在使用 @RequestParam 绑定的时候,可以省略参数,甚至连@RequestParam 都可 以省略:

    @GetMapping(value = "/getAdmin")
    public void getAdmin(Integer id, String name){
        System.out.println(id);
        System.out.println(name);
    }
  1. 参数绑定与类型转换(这里采用post请求)

当请求参数比较多,通常是将这些参数放到一个实体中,然后只需要在处理器 方法上定义这个实体作为参数。HandlerAdapter 会将这个对象的实例创建出来,然后从请求参数中取出这些参数然后放到实体对象中,需要注意的是请求参数的名字需要与实体类中的属性一对一对应,只有对应的属性才会提取参数的值。

package com.wang.ssm.controller;

import com.wang.ssm.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

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

@Controller//表示这个类是一个控制层的类,只能在类上添加,表示Spring生成此类的对象
@RequestMapping(path = "/admin")//请求映射,表示路径,也可以添加到方法上面去,提供的是一个映射地址
// 在类上标记映射地址时,整个应用程序中不能重复
//这两个标签是输入Spring MVC的标签内容
public class AdminController {

    @Autowired//Spring的标签,表示将对象注入进来
    AdminService adminService;

    @PostMapping(value = "/getAdmin")
    public void getAdmin(Admin admin){
        System.out.println(admin);
    }
}

定义好封装的类:

package com.wang.ssm.model;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component(value = "admin")
public class Admin {

    private Integer id;
    private String account;
    private String password;
    @DateTimeFormat(pattern = "YYYY-MM-dd")
    private Date birthday;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Admin{" +
                "id=" + id +
                ", account='" + account + ''' +
                ", password='" + password + ''' +
                ", birthday=" + birthday +
                '}';
    }
}

也是可以从前端接受到数据的:

在这里要注意一下对时间的传递
是要在封装类中对时间定义一下格式的

    @DateTimeFormat(pattern = "YYYY-MM-dd")
    private Date birthday;

封装后应该就不会在日期上出现什么影响。

页面打不开或者书籍传输乱码的问题,请看这一篇:

SpringMVC的过滤静态资源问题和中文乱码处理

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5637064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存