Spring MVC【参数的获取与数据返回】

简介: Spring MVC【参数的获取与数据返回】

🍎一. 获取参数


🍒1.1 获取单个参数


我们先创建一个对象来实现接下来的获取参数,我们来创建一个学生的信息

这里我们通过@Data注解来进行,来实现get,set,toString方法


/@Data注解包含 get()set()toString方法,如果没有@Data注解的话这个对象就必须实现这三个方法
@Data
@Controller
//伪代码
public class UserInfo {
    private int id;
    private String username;
    private String password;
    private int age;
}

我们创建好对象之后,就可以通过对象的set方法来进行获取参数,根据获取后的参加进行返回给服务器就可以看到获取参数的内容了

 @RequestMapping("/getuserbyid")
    //最好时包装类型数据Integer Character这种,不会在没有输入null值时报错,只会返回0
    public UserInfo getUserById(Integer id){
        //不查数据库,伪代码返回数据对象
        UserInfo userInfo = new UserInfo();
        userInfo.setId(id);
        //userInfo.setId(id);
        userInfo.setUsername("张三");
        userInfo.setPassword("123");
        userInfo.setAge(18);
        return userInfo;
    }

我们来通过postman来进行参数获取与返回


240fb9939c454aa6b33118b07fe4585e.png

🍒1.2 获取多个参数


这个与上面同理,我们只需要改需要获取参数的内容与个数即可

  @RequestMapping("/login")
    public String getUser(String username,String password){
        return "用户名:" + username +" " +  "密码:" + password ;
    }


参数重命名:

当我们与前端约定参数的value值时认为不适合自己代码的编写时,我们就可以将前端设置好的代码进行自定义,但是还是以前端约定好的代码进行交互的,我们只需要在方法获取参数的内容里


使用@RequestParam(value = "name",required = false)即可设置:

value = "name"这个是前端与后端约定好交互的参数名称,我们就可以通过在后面定义一个参数名既可以了

required = false是因为如果前端没有传递此参数就会报错所有我们可以将required 设置为false就不会报错了


我们从这里既就可以看到应该输入的数name,但是通过value = “name”,就可以将name修改为username

  @RequestMapping("/login")
    public String getUser(@RequestParam(value = "name",required = false) String username,String password){
        return "用户名:" + username +" " +  "密码:" + password ;
    }

0cf5529b1f8c4ca1bd9fb2e7697e8fef.png


🍒1.3 获取多个参数


@RequestMapping("/reg")
    public String reg(@RequestBody UserInfo userInfo){
        //不查数据库,伪代码返回数据对象
        return "用户信息:" + userInfo ;
    }



e743e69284c54091b804be3844d7a215.png

JSON格式发送和接收数据(服务器需要使用 @RequestBody注解才能接收和发送 JSON的数据)


 @RequestMapping("/reg")
    //@RequestBody 可以获取到输入的数据但是输入的数据名要对应对象名的大小写和数据格式(json)
    public String reg(@RequestBody UserInfo userInfo){
        //不查数据库,伪代码返回数据对象
        return "用户信息:" + userInfo ;
    }



964eae0184494f0fa64289abeda9e6e1.png


🍒1.4 获取URL中参数 (@PathVariable)


82547778271d4fcdbd683e9690c126d2.png

@RequestMapping("/login2/{username}/{password}")
    public String getUser2(@PathVariable String username,@PathVariable String password) {
        //不查数据库,伪代码返回数据对象
        return "用户名:" + username +" " + "密码:" + password;
    }

32e5d6ef94a542fb9ac4294bbf78bf24.png


🍎二. 上传文件 (@RequestPart)


🍒2.1 postman模拟上传文件

 @RequestMapping("/upimg")
    public boolean upImg(Integer uid, @RequestPart("img")MultipartFile file){
        //设置一个能判图片是否上传成功
        boolean result = false;
        //保存图片到本地目录(服务器)
        try {
            //D\Data\img.png 这是设置了保存文件地址和文件名
            file.transferTo(new File("D:\\Data\\img.png"));
            result = true;
        } catch (IOException e) {
            // 引用 @Slf4j进行日志打印
            log.error("上传图片失败" + e.getMessage());
            // e.printStackTrace();
        }
        return result ;
    }

72cf7ca867c94425bfa6fb30d53e3551.png

🍒2.2 将文件上传到某个目录里


我们在Windos 和 Linux系统上传的文件所保存的地址是不能一样的所有我们需要通过配置文件来进行开发和上线时进行分割,所有我们需要在创建一个application,yml配置文件 分别设置储存位置application-dev.yml(Windows),application-prod.yml(LInux)


d6c78db5342c4523a61a24ee0f61503c.pngec8bc5b5da3c48dcbf8925e8b69a1c30.png3d4f232a7be04cc09d56a464894ad33f.png
代码示例:


2c950158474d410087aa18162a214df9.png

 @RequestMapping("/upimg2")
    public boolean upImg2(Integer uid, @RequestPart("img")MultipartFile file){
        //1.目录 = imgpath
        //2.图片名称(图片名称不能重复)[时间戳(高并发易产生BUG)/UUID(优选)]
        // UUID是全局唯一ID 所有我们一般在高并发会选择UUID进行唯一标志
        //3.获取原上传图片的格式(png,jpg)
        //获取文件名
        String filename = file.getOriginalFilename();
        //获取文件名 .后面的格式名(png,jpg)
        filename = filename.substring(filename.lastIndexOf("."));
        filename = UUID.randomUUID().toString() + filename;
        //设置一个能判图片是否上传成功
        boolean result = false;
        //保存图片到本地目录(服务器)
        try {
            //D\Data\img.png 这是设置了保存文件地址和文件名
            file.transferTo(new File(imgpath + filename));
            result = true;
        } catch (IOException e) {
            // 引用 @Slf4j进行日志打印
            log.error("上传图片失败" + e.getMessage());
           //   e.printStackTrace();
        }
        return result ;
    }

我们就可以看到我们上传的文件照片,并且名字也是和我们在上传保存在手机或磁盘中的文件名很相似,ID名称生成就是这样实现的




09feb81befb5484f82997c97e52de365.png

🍎三. Cookie/Session/header的获取


🍒3.1 Cookie获取


获取 Request 和 Response 对象


  //获取 Cookie (Servlet 或者 Spring MVC)
    @RequestMapping("/cookie")
    public void getCookie(HttpServletRequest request) {
       Cookie[] cookies = request.getCookies();
        for (Cookie item : cookies) {
            log.info("Cookie Name :" + item.getName() + "Cookie Vlaue :" + item.getValue());
        }
    }
   //使用CookieValue
    @RequestMapping("/cookie2")
    public String getCookie2(@CookieValue("bite") String cookie) {
        return "Cookie Value" + cookie;
    }

🍒3.2 header获取


传统获取 HttpSelectRequest


/获取 Header (Servlet 或者 Spring MVC)
    @RequestMapping("/gettua")
    //获取请求头UA
    public String gethead(HttpServletRequest request){
        return  "header:" +request.getHeader("User-Agent");
    }

简洁获取 Header—@RequestHeader

  @RequestMapping("/gettua2")
    //获取请求头U A
    public String gethead2(@RequestHeader("User-Agent") String useragent){
        return  "header:" +useragent;
    }

🍒3.3 Session获取


Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的,如下代码所示:

  //存储和获取 Session
    //(存储 Servlet 和 Spring MVC 是一样的)
    @RequestMapping("/setsession")
    public boolean setSession(HttpServletRequest request) {
        boolean result = false;
        // 1. 得到 HttpSession
        HttpSession session = request.getSession(true);//如果 = ture的话就代表没有会话,那么就会自动创建会话
        // 2. 使用 setAtt 设置值
        session.setAttribute("userinfo", "userinfo");
        result = true;
        return result;
    }
// 1. 获取Session(Servlet 模式):
    @RequestMapping("/getsession")
      public String gerSession(HttpServletRequest request){
        String result = null;
        // 1. 先得到HttpSession 对象
        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute("userinfo") != null){
            result  = (String) session.getAttribute("userinfo");
        }
        // 2. getAtt 得到 SEssion 信息
        return result;
    }


// 2. 获取Session(Spring MVC 模式 @SessionAttribute):
    @RequestMapping("/getsession2")
    public String getSession2(@SessionAttribute(value = "userinfo",required = false) String userinfo){
        return "会话" + userinfo;
    }


相关文章
|
12天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
24 4
|
1月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
113 2
|
2月前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
69 1
Spring MVC——获取参数和响应
|
2月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
44 9
|
2月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
2月前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
100 2
|
2月前
|
前端开发 Java Spring
【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象
【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象
145 2
|
2月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
65 2
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
|
2月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
206 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习