SpringMVC 从入门到精通(续)

6.4 自定义类型转换器(以日期为例)

(1)问题场景

前端传递日期字符串(如2024-01-01),后端用Date类型接收时会报错,需自定义转换器。

(2)实现转换器
java 复制代码
import org.springframework.core.convert.converter.Converter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String source) {
        try {
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            return format.parse(source);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
(3)配置转换器
XML 复制代码
<!-- 开启注解驱动并指定转换器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

<!-- 配置转换器工厂 -->
<bean id="conversionService"
      class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="com.hg.converter.DateConverter"></bean>
        </set>
    </property>
</bean>

6.5 ServletAPI 接收参数

java 复制代码
@RequestMapping("/findAccount8")
public String findAccount8(HttpServletRequest request, HttpServletResponse response) {
    String username = request.getParameter("username");
    String age = request.getParameter("age");
    request.setAttribute("msg", username + " " + age);
    return "success";
}

七、数据传递方式

7.1 ModelAndView 传递

java 复制代码
@RequestMapping("/findAccount9")
public ModelAndView findAccount9(ModelAndView mv) {
    mv.addObject("msg", "ModelAndView传递数据");
    mv.setViewName("success");
    return mv;
}

7.2 Model 传递

java 复制代码
@RequestMapping("/findAccount10")
public String findAccount10(Model model) {
    model.addAttribute("msg", "Model传递数据");
    return "success";
}

7.3 ServletAPI 传递

java 复制代码
@RequestMapping("/findAccount11")
public String findAccount11(HttpServletRequest request) {
    request.setAttribute("msg", "ServletAPI传递数据");
    return "success";
}

八、JSON 数据交互

8.1 添加 JSON 依赖

XML 复制代码
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>

8.2 核心注解

  • @RequestBody:接收前端 JSON 字符串,转为 Java 对象
  • @ResponseBody:将 Java 对象转为 JSON 字符串,响应给前端

8.3 案例实现

(1)控制器方法
java 复制代码
@RequestMapping("/saveAccount2")
@ResponseBody
public Map<String, Object> saveAccount2(@RequestBody Account account) {
    Map<String, Object> map = new HashMap<>();
    map.put("status", 200);
    map.put("msg", account);
    return map;
}
(2)前端 AJAX 请求
html 复制代码
<input type="button" value="测试JSON交互" onClick="testJson()"/>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script type="text/javascript">
    function testJson() {
        axios.post('/account/saveAccount2', {
            "id": 1,
            "name": "张三",
            "money": 999.0,
            "address": {
                "provinceName": "北京",
                "cityName": "朝阳区"
            }
        }).then(response => {
            if (response.data.status === 200) {
                alert(response.data.msg.name);
            }
        }).catch(error => console.error('请求失败:', error));
    }
</script>

九、总结

本文详细讲解了 SpringMVC 的入门核心知识点,包括:

  1. SpringMVC 的核心优势与 MVC 设计模式
  2. 从零搭建 SpringMVC 工程环境
  3. 核心组件与执行流程
  4. RequestMapping 注解、参数接收、数据传递
  5. JSON 数据交互

掌握这些知识点,即可完成 SpringMVC 基础开发。后续将继续讲解拦截器、文件上传、异常处理等高级特性,敬请关注!

附:常见问题解决

  1. 中文乱码:POST 请求配置 CharacterEncodingFilter,GET 请求配置 Tomcat 的 uriEncoding
  2. 日期转换失败:自定义类型转换器并配置
  3. 404 错误:检查视图解析器前缀 / 后缀、文件路径、访问 URL 是否正确
  4. 405 错误:请求方式与 @RequestMapping 的 method 属性不匹配
相关推荐
xieliyu.6 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
星辰徐哥6 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥6 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约6 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee6 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐6 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs6 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐6 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司6 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
码农阿豪6 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端