首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 註解開發核心:參數綁定機制深度解析

     編輯:Java 綜合教學

Spring MVC 註解開發核心:參數綁定機制深度解析

Spring MVC 通過參數綁定將 HTTP 請求參數自動映射到 Controller 方法參數,支援簡單類型、POJO、集合及自定義類型轉換。本文系統梳理綁定流程、支援類型、常用註解與最佳實踐。

參數綁定流程

客戶端請求 → HandlerAdapter → 參數解析器 → 綁定到方法形參。關鍵點:Spring MVC 通過方法形參接收數據,而非 Controller 成員變量,保證線程安全。

默認支援的參數類型

  • HttpServletRequest、HttpServletResponse、HttpSession
  • Model/ModelMap:向請求域填充數據
  • InputStream/OutputStream、Reader/Writer

簡單類型綁定:@RequestParam

@RequestMapping("/editItems")
public String editItems(Model model,
    @RequestParam(value = "id", required = true, defaultValue = "1") Integer itemsId) {
    // required=true 時必須傳參,否則拋異常
    // defaultValue 指定默認值
    return "editItems";
}

不使用 @RequestParam 時,要求請求參數名與形參名完全一致。

POJO 綁定:自動映射表單字段

規則:表單 input name 與 POJO 屬性名一致即可自動綁定(非形參名)。框架內部使用反射遍歷 POJO 屬性匹配。

public class Items {
    private Integer id;
    private String name;
    private Float price;
    // getter/setter 省略
}

// JSP:  → 自動綁定到 items.name

自定義類型轉換:日期綁定實戰

POJO 包含 Date 類型屬性時,需註冊 Converter<String, Date>。

public class CustomDateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String source) {
        try {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(source);
        } catch (ParseException e) {
            return null; // 綁定失敗返回 null
        }
    }
}

Spring 配置註冊轉換器

<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="com.iot.learnssm.firstssm.controller.converter.CustomDateConverter"/>
        </list>
    </property>
</bean>

Spring MVC vs Struts 2 核心差異

維度Spring MVCStruts 2
開發基礎方法級(單例 Bean)類級(多例 Action)
參數接收方法形參類成員變量
線程安全天然線程安全需開發者保證
性能較高標簽庫導致較慢

Spring MVC 基於方法開發,Controller 可安全單例;Struts 2 基於類開發,Action 必須多例,且標簽庫渲染較慢,建議搭配 JSTL 使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved