由一個異常開始思考springmvc參數解析

来源:http://www.cnblogs.com/zr520/archive/2016/10/12/5952874.html
-Advertisement-
Play Games

首先記錄一下異常,以及異常出現的原因和解決方案 異常主要信息: 我說一下我的解決過程 我根據這個異常的提示,跟蹤到AbstractNamedValueMethodArgumentResolver的resolveArgument方法,然後從介面中看到了它的作用,就是將 處理器中的映射方法的參數進行處理 ...


首先記錄一下異常,以及異常出現的原因和解決方案

  異常主要信息:

2016-10-12 12:40:46,808 ERROR [500.jsp] - Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
java.lang.IllegalArgumentException: Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:141)
    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.getNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:119)
    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:86)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:78)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
    at org.springframework.web.method.annotation.ModelFactory.invokeModelAttributeMethods(ModelFactory.java:136)

我說一下我的解決過程 我根據這個異常的提示,跟蹤到AbstractNamedValueMethodArgumentResolver的resolveArgument方法,然後從介面中看到了它的作用,就是將

處理器中的映射方法的參數進行處理

從這張繼承圖也可以看出來,對於參數中的任何註解都會調用處理器,包括:@RequetParam,@PathVaiable,@Value,@RequestHeader@Value @CookieValue @MatrixVariable  至於每個註解的使用 都可以執行百度。

搜嘎!我大概知道了 應該是我的項目中這些註解中出的問題  然後在debug看

org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(MethodParameter, ModelAndViewContainer, NativeWebRequest, WebDataBinderFactory)

這個方法中的各個參數  猜得沒錯的話  第一的就是代表處理器的方法了,繼續往下看,有這樣一段代碼:

	private NamedValueInfo updateNamedValueInfo(MethodParameter parameter, NamedValueInfo info) {
		String name = info.name;
		if (info.name.length() == 0) {
			name = parameter.getParameterName();
			if (name == null) {
				throw new IllegalArgumentException("Name for argument type [" + parameter.getParameterType().getName() +
						"] not available, and parameter name information not found in class file either.");
			}
		}
		String defaultValue = (ValueConstants.DEFAULT_NONE.equals(info.defaultValue) ? null : info.defaultValue);
		return new NamedValueInfo(name, info.required, defaultValue);
	}

  沒錯 異常就是這個來的  我發現name竟然是null ,聯想到我的RequestParam註解的name屬性沒有的,是不是這個原因呢?但是不對啊  雖然沒有name屬性  但是不是會迷人的根據後面的欄位來生成的嗎?以前教程都是這樣說的。我把這個疑問Google了一下  網上一致說的是ant設置了debug級別,需要改成on 但是我根本沒有用ant。我是使用eclipse的tomcat。最後的猜想是eclipse有這樣的一個設置 最後果然沒錯還真有:

。重啟就ok了!!!

問題是解決了,但是很不解啊  因為如果是這樣的話  那麼不確定性很高啊  萬一別人沒有設置怎麼辦呢?

google了一波 其實這是因為大家都被大部分的springmvc視頻或者教程誤導了,官方的解釋是只有在debug模式編譯時,參數名才會保留在class文件中,spring由此可以反射綁定......

所以說  最後是一定要加name屬性啊!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一個C程式是由一個或者多個函數組成,並必須只有一個main()函數。我建議不要使用void main的形式,同建議用 int main 然後return 0;的形式,至於為什麼要這樣做,我也不知道。 一個文件內、一個函數內、一個控制語句內、一對花括弧內,都可以稱為一個代碼塊。 聲明與定義 int n ...
  • 題目鏈接 http://acm.hdu.edu.cn/showproblem.php?pid=5091 Problem Description Recently, the γ galaxies broke out Star Wars. Each planet is warring for resou ...
  • 一、看一下簡單的通過XML的AOP配置 1.首先創建一個簡單的Student類 2.創建一個簡單的aspect切麵class 3.SpringAOP.xml配置 分析一下這個execution(* com.seeyon.SpringBean.aop.Student.get*(..))切點表達式: ( ...
  • 一、映射多對一關聯關係。 1.單向的多對一 (1)以 Customer 和 Order 為例:一個用戶可以發出多個訂單,而一個訂單隻能屬於一個客戶。從 Order 到 Customer 是多對一關聯關係。 (2)創建 Customer 和 Order 表。 CREATE TABLE customer ...
  • 一、單向的多對一 1.建表語句 2.Intellij Idea 操作 3.Order.hbm.xml 文件 二、雙向的多對一 1.建表語句和單向的多對一相同 2.Intellij Idea 操作 3.生成的實體 4.hbm 文件 三、基於外鍵的雙向一對一 1.建表語句 2.生成的實體 3.hbm文件 ...
  • 概述 C語言的數據類型有基本類型,構造類型,指針類型,空類型 空類型就是void,指針類型這裡不說,構造類型也不說(數組,結構體,聯合體,枚舉,嵌套),這裡只說基本類型。 基本類型有:短整型(short)、整型(int)、長整型(long)、字元型(char)、單精度浮點型(float)、雙精度浮點 ...
  • 這裡採用夏宇聞教授第十五章的序列檢測為例來學習; 從以上的狀態轉換圖可以寫出狀態機的程式: 以下是測試模塊: 其實這裡也可以採用六個狀態來實現功能: 以下是測試模塊: 也可以用移位寄存器來實現: 1 module seqdet 2 ( 3 input wire x, 4 input wire clk ...
  • 一直在使用Mybatis這個ORM框架,都是使用mybatis里的一些常用功能。今天在項目開發中有個業務是需要限制各個用戶對某些表裡的欄位查詢以及某些欄位是否顯示,如某張表的某些欄位不讓用戶查詢到。這種情況下,就需要構建sql來動態傳入表名、欄位名了。現在對解決方法進行下總結,希望對遇到同樣問題的夥 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...