2015-05-03 45 views
2

我作爲一個路徑變量發送電子郵件ID服務器爲():當路徑變量包含@ResponseBody然後不工作

@RequestMapping(value = "/resetPassword/{email:.+}", method = RequestMethod.GET) 
public @ResponseBody MyResponse resetPassword(HttpServletRequest request, @PathVariable("email") String email) 
{ 
    MyResponse res = new MyResponse(); 
    res.setMsg("some Text"); 
    return res; 
} 

,我的jQuery的調用方法:

var email = $("#fpusername").val(); 
$.ajax({ 
    type : "GET", 
    url : "./useraccount/resetPassword/" + email, 
    dataType : "json", 
    async : true, 
    success : function(data) { 
     alert(data.msg); 
    } 
}); 

同樣的方法工作時,我送[email protected]email值,但提示以下錯誤:發送[email protected]

406 [由該請求所標識的資源僅能夠 與根據該請求的特性不能接受產生響應的「接受」報頭]

+1

可能重複[(。)Spring MVC的@PathVariable與點也越來越截斷(HTTP://計算器。com/questions/16332092/spring-mvc-pathvariable -with-dot-is-getting-truncated) –

+0

@Martin Frey:不,這裏的問題不在於我的路徑變量在(。)之後被截斷。這裏的問題是當路徑變量包含一個(。),那麼響應正文註解不起作用,因此ajax沒有從服務器得到正確的響應 –

+0

真的。我錯過了正則表達式。您是否嘗試將響應mediatype修復爲json? –

回答

1

doc警告有關使用等效例子

缺省時,Spring MVC自動執行此陷阱".*"後綴模式 匹配,使映射到/person的控制器也隱式地 映射到/person.*。這允許通過文件 擴展名來指示內容類型,例如, /person.pdf,/person.xml等。然而,當映射的最後一個路徑段是變量的URI 時,常見的缺陷是 。 /person/{id}。儘管對於/person/1.json的請求 將正確地導致路徑變量id=1和擴展".json",而當 ID自然包含點(例如, /person/[email protected]結果 與預期不符。很明顯,這裏".com"不是文件 的擴展名。

當決定了內容類型時,Spring使用所謂的PPA策略(Path,Parameter,Accept header)。這裏你的.com被視爲一個路徑(擴展名),並試圖解決基於它的表示,因此你是個例外。你可以採取兩條道路來解決這個問題。

要麼配置Spring只使用註冊的後綴,例如在XML

<mvc:annotation-driven> 
    <mvc:path-matching registered-suffixes-only="true" /> 
</mvc:annotation-driven> 

的doc和提供相應的Java配置here

或通過路徑關閉mathching如果這是給你的可行的解決方案,例如

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" /> 

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
    <property name="favorPathExtension" value="false" /> 
    <property name="mediaTypes" > 
     <value> 
      json=application/json 
      xml=application/xml 
     </value> 
    </property> 
</bean> 

的doc和相應的Java配置提供的here

0

已映射web.xml中的URL模式? 如果您有沒有將網址映射這種方式來接受您的網址由彈簧爲有效:

<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>*.com</url-pattern> 
</servlet-mapping>