SpringMVC参数接收与数据返回详解

一,参数的接收

参数接收的几种方式:

1.使用servlet API接收参数

在方法参数中添加HttpServletRequest类型的参数,然后就可以像servlet的方法一样来接收参数 

@RequestMapping("p1")public String param1(HttpServletRequest request){String name = request.getParameter("name");String password = request.getParameter("password");return "hello";}

2.在方法中定义同名参数

@RequestMapping("param2")public String method2(int id,String name){System.out.println(id+name);return "param";}

如果url地址中的参数名与方法的参数名不一致时,可以使用RequestParam注解进行重新关联

@RequestMapping("param3")public String method3(@RequestParam("p") String password){System.out.println(password);return "param";}

url地址中的参数名p,而方法中的参数名是password,这时我们可以使用RequestParam注解对参数进行重新关联

当我们在方法中接收一个整数类型的参数时,如果url中没有传递该参数则会抛异常。如果这个参数不是必须要传递的,我们可以给该参数设置默认值。

@RequestMapping("p2")public String param2(String name,@RequestParam(defaultValue = "0") int age){System.out.println(name);System.out.println(age);return "hello";}

设置完默认值后,如果url中没有携带id参数,则该参数默认值为0,不会抛出异常

3.使用POJO类接收参数

 什么是POJO?
“Plain Old Java Object”“简单java对象”。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。

@RequestMapping("student")public String test(Student student){System.out.println(student);return "param";}

spring会自动的从请求中把参数名与Student类中属性名相同的数据,进行赋值

4.使用PathVariable接收参数

//restful请求传参方式,可以传递多个参数,每个参数都用/分隔,但是不建议传递多个//最好只传一个@RequestMapping("p4/{id}")public String param4(@PathVariable("id") int id){System.out.println(id);return "hello";}

 使用PathVariable进行参数传递,首先要在地址中添加占位符,然后使用PathVariable跟方法入参进行绑定

二,返回数据的几种方式

1.使用servlet API传递数据:

 首先需要在方法中增加HttpServletRequest类型的参数,然后使用request对象传递数据,使用方式与之前学习servlet时的用法一致

@RequestMapping("resp2")public String method2(HttpServletRequest request){request.setAttribute("msg","test");Student student=new Student();student.setName("张三");request.setAttribute("student",student);return "resp2";}

2.使用Map集合传递参数

首先需要在方法中增加java.util.Map类型的参数,然后使用map对象通过put方法,把数据写入到map中,进行数据传递

@RequestMapping("resp3")public String method3(Map<String,Object> map){map.put("msg","map传参");Student student=new Student();student.setName("张三");map.put("student",student);return "resp2";}

3.使用Model传递数据:

首先需要在方法中增加Model类型的参数,然后使用model对象通过addAttribute方法,把数据写入到addAttribute对象中,进行数据传递

 @RequestMapping("r2")public String res2(Model model){//springMVC推荐使Model进行model.addAttribute("msg","model 传参");return "resp";}

4.使用ModelAndView传递数据:

首先在方法中创建ModelAndView对象,使用addObject方法传递数据,使用setViewName设置要跳转的页面,注意方法的返回值也是ModelAndView类型

@RequestMapping("resp5")public ModelAndView method(){ModelAndView mv=new ModelAndView();//使用addObject方法传递参数mv.addObject("msg","ModelAndView传参");//使用setViewName方法设置跳转页面mv.setViewName("resp2");return mv;}

以上四种返回数据的方式都可以使用,效率上也几乎无差别,没有具体的好与坏,想要使用哪种看自己的个人喜好

三,文件上传

  • Spring MVC 为文件上传提供了直接的支持,这种支持是通 过即插即用的 MultipartResolver 实现的。Spring 用 Jakarta CommonsFileUpload 技术实现了一个 MultipartResolver 实现类:CommonsMultipartResovler
  • Spring MVC 上下文中默认没有装配 MultipartResovler,因 此默认情况下不能处理文件的上传工作,如果想使用 Spring 的文件上传功能,需现在上下文中配置 MultipartResolver

配置CommonsMultipartResolver

首先配置编码,必须跟jsp文件中的编码保持一致
maxUploadSize用来配置最大支持的文件大小,默认是不限制,单位是byte

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UTF-8"/><property name="maxUploadSize" value="5242880"/></bean>

导入上传文件需要的jar包

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>

编写上传的jsp页面

注意enctype属性,如果不加是无法上传文件的

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>file</title>
</head>
<body><form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><br/><input type="submit" value="上传">
</form>
</body>
</html>

编写用于上传的controller方法

注意参数类型,一定要用RequestParam注解标注,否则报错

@RequestMapping("upload")public String upload(@RequestParam("file")MultipartFile file) throws Exception{//获取文件原名System.out.println(file.getOriginalFilename());String path="D:\\Java\\"+file.getOriginalFilename();file.transferTo(new File(path));return "hello";}

四,处理JSON数据

什么是JSON数据格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。相当于Java中的Map
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

JSON数据格式

{
"name": "张三",
"age": 20,
"email": "5689876@qq.com",
"phone": "15122334455",
}

这就是一段最简单的JSON格式的数据

SpringMVC返回JSON

1.配置jar包
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.11.2</version></dependency>
2.配置文件中添加<mvc:annotation-driven/>标签
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:comtext="http://www.springframework.org/schema/context"xmlns:avc="http://www.springframework.org/schema/cache"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"><avc:annotation-driven/><comtext:component-scan base-package="com.haina.springmvc"/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UTF-8"/><property name="maxUploadSize" value="5242880"/></bean>
</beans>
3.添加方法
package com.haina.springmvc;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class JSONController {//ResponseBody注解的作用是让该方法不再跳转页面,而是返回JSON格式的数据@RequestMapping("j1")@ResponseBodypublic Map<String,Object> j1(){Map<String,Object> map=new HashMap<String, Object>();map.put("code",1001);map.put("msg","success");return map;}@RequestMapping("j2")@ResponseBodypublic Student j2(){Student st=new Student();st.setNo(1234);st.setName("张三");st.setAge(20);st.setMajor("计算机");return st;}@RequestMapping("j3")@ResponseBodypublic List<Student> j3(){List<Student> list=new ArrayList<Student>();for (int i=0;i<10;i++){Student st=new Student();st.setNo(1234+i);st.setName("张三"+i);st.setAge(20+i);st.setMajor("计算机"+i);list.add(st);}return list;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90076.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 人脸分析----人脸识别的一个经典类cv::face::EigenFaceRecognizer

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 这是基于 PCA&#xff08;主成分分析&#xff09; 的人脸识别算法实现。它通过将人脸图像投影到一个低维的“特征脸”空间中进行识别&#xff0c…

RESTful风格

带着问题&#xff0c;找答案&#xff1a; 通过本片文章&#xff0c;你会了解以下四点。并且我会给出go语言的实现案例。 1、了解restful风格的来源、起源、演变史 2、了解restful风格的定义、含义 3、掌握restful风格的简单运用 4、做一个小demo 在restful中前进&#xf…

了解GC吗?什么是GC?

GC是什么&#xff1f;为什么要GC&#xff1f; GC&#xff08; Garbage Collection &#xff09;&#xff0c;垃圾回收&#xff0c;是Java与C的主要区别之一。作为Java开发者&#xff0c;一般不需要专门编写内存回收和垃圾清理代码。这是因为在Java虚拟机中&#xff0c;存在自动…

FDMA读写AXI BRAM交互:FPGA高速数据传输的核心技术

在图像处理系统中,当1080P视频流以每秒60帧的速度传输时,传统DMA每帧会浪费27%的带宽在地址管理上——而FDMA技术能将这些损失降至3%以内 现代FPGA系统中,高效数据搬运往往是性能瓶颈的关键所在。当你在手机上流畅播放4K视频、在自动驾驶系统中实时处理激光雷达点云时,背后…

独立开发A/B测试实用教程

A/B测试&#xff08;A/B Testing&#xff09;&#xff0c;又称分组测试、对照实验&#xff0c;是产品开发和运营中提升转化率、优化用户体验的常用方法。无论你是做App、SaaS、网站还是小程序&#xff0c;合理地利用A/B测试&#xff0c;都能帮助你用数据驱动决策&#xff0c;让…

如何将iPhone备份到Mac/MacBook

许多iPhone用户非常重视备份&#xff0c;但在Mac上选择合适的备份方法可能会令人困惑。市场上有各种各样的备份工具&#xff0c;找到一个既易于使用又能保存所有重要数据&#xff08;如照片、视频、消息、WhatsApp聊天记录和联系人&#xff09;的工具至关重要。如果你正在寻找一…

Logseq 插件开发实战四:发布到官方插件市场

&#x1f6a9;系列回顾 初识插件机制并实现自动压缩粘贴的图片国际化 I18N 与配置多语言自定义斜线命令 SlashCommand发布到官方插件市场 开源地址&#xff1a;logseq-plugin-image-tiny&#xff0c;欢迎来⭐。 &#x1f41e; 插件上线问题记录 问题描述 本地插件开发完成后…

[netty5: ByteToMessageCodec MessageToByteEncoder ByteToMessageDecoder]-源码分析

ByteToMessageCodec ByteToMessageCodec 是一个结合了 ByteToMessageDecoder 和 MessageToByteEncoder 的编解码器&#xff0c;可以实时地将字节流编码或解码为消息&#xff0c;反之亦然。 public abstract class ByteToMessageCodec<I> extends ChannelHandlerAdapter {…

Ubuntu20.04安装mujoco210, mujoco-py时的报错处理

参考 Ubantu 20.04 安装 Mujoco210、mujoco-py、gym及报错解决 安装 mujoco210 创建 .mujoco 文件夹 mkdir ~/.mujoco亲测必须是 .mujoco 文件夹&#xff0c;不然会报错&#xff01; 下载 mujoco210-linux-x86_64.tar.gz 并解压到 .mujoco 文件夹 mojoco下载地址 测试 mojo…

全志T507 音频ALSA核心层注册流程分析

一.ALSA核心层注册流程分析 驱动目录&#xff1a;kernel-4.9/sound/core/sound.c struct file_operations snd_fops {.owner THIS_MODULE,.open snd_open, (inode, file)---->struct snd_minor *mptr snd_minors[minor];---->file->f_op fops_get(mptr->f_ops…

评论区实现 前端Vue

根据后端部分定义评论区功能实现 golang后端部分-CSDN博客&#xff0c;重点需要实现三个部分&#xff0c;1.当前用户发起新根评论请求&#xff1b;2.评论区展示部分&#xff1b;3.某一根评论的子评论展示以及回复组件显示。 整体流程解释 数据从后端接收&#xff0c;整体在in…

差分定位技术:原理、分类与应用场景

文章目录 简介基本概念位置差分伪距差分载波相位 差分定位技术精密单点定位&#xff08;PPP&#xff09;差分全球定位系统&#xff08;DGPS&#xff09;实时动态定位&#xff08;RTK&#xff09; 应用场景总结 简介 差分定位&#xff08;Differential Positioning&#xff09;是…

tomcat的tar包转换成rpm包的保姆级教程

环境说明 &#xff1a;centos 71. 安装打包工具&#xff1a;yum install -y rpm-build rpmdevtools2. 创建 RPM 打包环境&#xff1a;rpmdev-setuptree​输入之后是下面的结果~/rpmbuild/ ├── BUILD ├── RPMS ├── SOURCES ├── SPECS └── SRPMS​准备 Tomcat 源码…

【牛客算法】小美的数组删除

文章目录 一、题目介绍二、解题思路三、解题算法实现四、算法分析4.1 代码逻辑4.2 逆向遍历求MEX的设计精妙之处4.2.1 逆向遍历:解决MEX更新的连续性4.2.2 利用MEX的单调性4.2.3 空间复用与状态压缩4.2.4 与问题特性的完美契合4.2.5 总结:为什么说这个设计“妙”?五、算法复…

MyBatisPlus-01-环境初始化及简单应用

文章目录【README】【1】springboot集成mybatis-plus配置【1.1】目录结构【相关说明】【1.2】代码示例【pom.xml】【application.properties】【MybatisPlusNoteController】【UserAppService】【UserMapper】【UserPO】【建表语句】【2】演示【README】 本文代码参见&#xf…

Web爬虫编程语言选择指南

刚学爬虫的小伙伴常常为选择那种语言来写爬虫而烦恼&#xff0c;今天我将总结几种语言的优劣势&#xff0c;然后选择适合编写 Web爬虫 的编程语言。这就需要我们考虑开发效率、生态库支持、并发性能等因素。以下是主流选择及特点跟着一起看看吧&#xff1a; 1. Python&#xff…

学习日志06 python

加油&#xff0c;今天的任务是学习面向对象编程&#xff0c;设计一个简单的宠物管理系统&#xff08;宠物类、猫 / 狗子类&#xff09;&#xff0c;先做5道题目开启学习状态吧&#xff01;1 setdefault()在 Python 中&#xff0c;setdefault() 是字典&#xff08;dict&#xff…

基于Java+springboot 的车险理赔信息管理系统

源码、数据库、包调试源码编号&#xff1a;S595源码名称&#xff1a;基于springboot 的车险理赔信息管理系统用户类型&#xff1a;多角色&#xff0c;用户、事故调查员、管理员数据库表数量&#xff1a;14 张表主要技术&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven运…

MyDockFinder 绿色便携版 | 一键仿Mac桌面,非常简单

如果你既不想升级到Win11&#xff0c;又想体验Mac桌面的高级感&#xff0c;那么MyDockFinder将是你的最佳选择。这是一款专为Windows系统设计的桌面美化工具&#xff0c;能够将你的桌面转变成MacOS的风格。它提供了类似Dock栏和Finder的功能&#xff0c;让你在不更换操作系统的…

Babylon.js 材质克隆与纹理共享:你可能遇到的问题及解决方案

在 Babylon.js 中&#xff0c;材质&#xff08;Material&#xff09;和纹理&#xff08;Texture&#xff09;的克隆行为可能会影响渲染性能和内存管理&#xff0c;尤其是在多个材质共享同一纹理的情况下。本文将探讨&#xff1a;PBRMetallicRoughnessMaterial 的克隆机制&#…