当前位置: 首页 > news >正文

SpringMVC(2)学习

第三章:请求参数的绑定

请求参数绑定说明

1 绑定机制

​ 表单提交的数据都是k=v格式的 username=hh&password=123

​ SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的

​ 要求:提交的表单的name和参数的名称是相同的

2 支持的数据类型

​ 基本数据类型和字符串类型

​ 实体类型(JavaBean)

​ 集合数据类型(List,map集合等)

基本数据类型和字符串类型

​ 提交表单的name和参数名称是相同的

​ 区分的大小写

实体类型(javaBean)

​ 提交表单的name和javaBean的属性名称需要一致

​ 如果一个javaBean表中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性:

​ 比如:address.name

给集合属性数据封装

​ JSP页面编写方式:list[0].属性

练习代码

suc.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>成功</title>
</head>
<body><h3>请求参数绑定入门</h3>
<form action="/user/save1.do" method="post">姓名:<input type="text" name="username" /><br/>年龄:<input type="text" name="age" /><br/><input type="submit" value="提交" />
</form><h3>请求参数绑定(封装到实体类)</h3>
<form action="/user/save2.do" method="post">姓名:<input type="text" name="username" /><br/>年龄:<input type="text" name="age" /><br/>
<%--    生日:<input type="date" name="birthday">--%><input type="submit" value="提交" />
</form><h3>请求参数绑定(封装到实体类)</h3>
<form action="/user/save3.do" method="post">姓名:<input type="text" name="username" /><br/>年龄:<input type="text" name="age" /><br/>金额:<input type="text" name="address.money" /><br/><input type="submit" value="提交" />
</form><h3>请求参数绑定(封装到实体类,存在list集合)</h3><form action="/user/save4.do" method="post">姓名:<input type="text" name="username" /><br/>年龄:<input type="text" name="age" /><br/>金额:<input type="text" name="address.money" /><br/>集合:<input type="text" name="list[0].money" /><br/>集合:<input type="text" name="list[1].money" /><br/><input type="submit" value="提交" />
</form></body>
</html>

javaBean代码

User类

package com.xsy.demo.entity;import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;
import java.util.List;@Data
public class User {private String username;private Integer age;
//    生日
//    2000-1-1格式的日期不能进行转换了  开发使用比较多 比较简单@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;
//  引用对象private Address address;//    list集合private List<Address> list;}

Address类

package com.xsy.demo.entity;import lombok.Data;@Data
public class Address {private Double money;
}

Controller代码

package com.xsy.demo.controller;import com.xsy.demo.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/user")
public class UserController {/*** @param username 用户名* @param age 年纪* @return*/@RequestMapping("/save1.do")public String save(String username,Integer age){System.out.println("姓名"+username);System.out.println("年龄"+age);return "suc";}@RequestMapping("/save2.do")public String save2(User user){System.out.println("user:"+user);return "suc";}@RequestMapping("/save3.do")public String save3(User user){System.out.println("user对象:"+user);return "suc";}@RequestMapping("/save4.do")public String save4(User user){System.out.println("user对象:"+user);return "suc";}}

自定义类型转换器

第一种方法使用@DateTimeForemat注解的方法

package com.xsy.demo.entity;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
@Data
public class User {private String username;private Integer age;
//    生日
//    2000-1-1格式的日期不能进行转换了  开发使用比较多 比较简单@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;
//  引用对象private Address address;//    list集合private List<Address> list;}

然后修改配置文件Spring.xml添加下面代码

<mvc:annotation-driven/>是 Spring MVC 中的一个重要配置,它的作用是启用 Spring MVC 的默认配置并注册所需的组件。如果不添加这个配置

注册下面三个组件

注册核心组件

  • 处理器映射器RequestMappingHandlerMapping
  • 处理器适配器RequestMappingHandlerAdapter
  • 异常解析器ExceptionHandlerExceptionResolver
功能是否受影响影响程度
@DateTimeFormat注解完全失效严重
@NumberFormat注解完全失效严重
@RequestMapping等注解基本正常轻微
@RequestParam@PathVariable部分失效中等
数据绑定和验证功能受限中等
<!-- 不配置自定义 conversionService,使用默认的 -->
<mvc:annotation-driven/>

第二种方式,自定义类型转化器,如果想自定义数据类型转换,可以实现Converter接口

1 自定义类型转换器

package com.xsy.demo.utils;import org.springframework.core.convert.converter.Converter;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class StringToDate implements Converter<String, Date> {@Overridepublic Date convert(String source) {if (source == null) {throw new RuntimeException("请输入内容");}SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");try {return simpleDateFormat.parse(source);} catch (ParseException e) {throw new RuntimeException(e);}}
}

2 注册自定义类型转换器 在Springmvc.xml编写配置

<!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"></property><property name="suffix" value=".jsp"></property>
</bean><!-- 配置转换服务 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><bean class="com.xsy.demo.utils.StringToDate" /></set></property>
</bean>
<!-- 配置spring开启注解mvc的支持,并指定转换服务 -->
<mvc:annotation-driven conversion-service="conversionService"/>

在控制器中使用原生的ServletAPI对象

1 只需要在控制器的方法参数中定义HttpServletRequest和HttpServletResponse对象在这里插入图片描述

//使用原生API 
@RequestMapping("/save6.do")public String savr6(HttpServletRequest request, HttpServletResponse response){System.out.println(request);
//        获取到HttpSession对象HttpSession session = request.getSession();System.out.println(session);System.out.println(response);return "suc";}

结果:

第四章:常用的注解

RequestParam注解

作用:把请求中指定名称的参数传递给控制器中的形参赋值

属性

​ value:请求参数的名称

​ required:请求参数中是否必须提供此参数,默认是true,必须提供

@Controller
@RequestMapping("/dept")
public class DeptController {@RequestMapping("/save1.do")public String save(@RequestParam(value = "username",required = false,defaultValue = "xsy")String name){System.out.println(name);return "suc";}
}

RequestBody注解

作用:用于获取请求体中的内容(注意:get方法不可以)

属性

​ required:是否必须有请求体,默认是true

@RequestMapping("/save2.do")
public String save2(@RequestBody String body){System.out.println(body);return "suc";
}

PathVaribale注解

作用:拥有绑定url中的占位符的 例如:url中有/delete/{id} ,{id}就是占位符

属性

​ value:指定url中的占位符名称

Resuful风格的URL

​ 请求路径一样,可以根据不同的请求方法去执行后台的不同方法

​ Resulful风格的URL优点

  1. 结构清晰
  2. 符合标准
  3. 易于理解
  4. 扩展方便

代码

可以使用apipost和postman进行测试

@RequestMapping(path = "emp",method = RequestMethod.POST)
public void save(){System.out.println("xsy保存了员工");
}@RequestMapping(path = "/emp",method = RequestMethod.GET)
public void findAll(){System.out.println("xsy查询所有员工");
}
@RequestMapping(path = "/emp/{id}" ,method = RequestMethod.GET)
public void findById(@PathVariable(value = "id") int id){System.out.println("xsy通过id查询员工..."+id);
}

修改前端控制器的配置文件

<!--配置前端控制器-->
<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加载springmvc.xml配置文件,配置的是Spring配置--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--配置启动加载--><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

RequestHeader注解

作用:获取指定请求头的值

属性:

​ value:请求头的名称

@RequestMapping(value = "/getreahead")
public void getreqhead(@RequestHeader(value = "Accept") String header){System.out.println("Accept请求头的值"+header);
}

CookieValue注解

@RequestMapping(value = "/getcookie")
public void getcookie(@CookieValue(value = "JSESSIONID") String cookie){System.out.println("cookie的值"+cookie);
}
http://www.dtcms.com/a/609358.html

相关文章:

  • 面向智能教育的生成式AI个性化学习内容生成研究
  • C语言编程代码编译 | 学习如何高效编译和调试C语言程序
  • 多模态学习与多模态模型
  • 网站建设费的税率网页设计制作用什么软件
  • Flutter Material 3设计语言详解
  • 天猫魔盒M19_晶晨S912H当贝桌面线刷机包_adb开启
  • 长沙seo优化排名东营优化网站
  • Python 编程实战 · 实用工具与库 — Flask 基础入门
  • supOS工厂操作系统 | 像“拼乐高”一样做数据分析
  • 青岛营销型网站推广wordpress doc导入
  • upload-labs(1-13)(配合源码分析)
  • Kubernetes-架构安装
  • 【剑斩OFFER】算法的暴力美学——二维前缀和
  • 网站开发教程全集哪些网站做的好看
  • 2025IPTV 源码优化版实测:双架构兼容 + 可视化运维
  • 建设一个网站步骤揭阳专业网站建设
  • ftp下的内部网站建设竞价培训课程
  • 技术观察 | 语音增强技术迎来新突破!TFCM模型如何攻克“保真”与“降噪”的难题?
  • FPGA系统架构设计实践5_IP的封装优化
  • UDP服务端绑定INADDR_ANY后,客户端该用什么IP访问?
  • 不同传感器前中后融合方案简介
  • 《C++在LLM系统中的核心赋能与技术深耕》
  • sward V2.1.5 版本发布,支持文档导出为html\PDF,社区版新增多种账号集成与认证
  • 东莞建站网站模板怎么做电脑网站后台
  • 物联网赋能互联网医院:构建智慧医疗新生态
  • node.js+npm的环境配置以及添加镜像(保姆级教程)
  • Java 大视界 -- 基于 Java 的大数据联邦学习在跨行业数据协同创新中的实践突破
  • 企业做网站电话约见客户的对话北京网站建设 一流
  • Android Studio + Gemini 移动开发领域的一次范式转移
  • 基于多源政策信号解析与量化因子的“12月降息预期降温”重构及黄金敏感性分析