2013-05-22 44 views
0

我有一些網址,需要從@PathVariable/{city}/**@ControllerAdvise可以排除或包含一些網址嗎?

我需要將城市價值轉換成一個bean,並在以後的視圖中使用它們添加@ModelAttribute;

現在我@ControllerAdvise使它並添加@ModelAttribute所有@RequestMapping

但一些網址不要包含像/

當請求/,春節拋出一個異常表明,在沒有{city}一個{city}路徑路徑

可以@ControllerAdvise排除建議一些URL像「/」或有沒有其他方式沒有@ControllerAdvise落實它呢?我試過HandlerInterceptor,但它是不容易解決它

編輯: 由於大多數我的網址像/{city}/**,並且在大多數@RequestMapping{city}變量並不需要傳遞給服務,我只是改變它,並把它傳遞給風景。我不會看到我的@RequestMapping方法的大部分參數爲City,只是將它添加到Model@Controller。這很醜陋。

所以@Bhashit帕瑞克後可能更符合我的要求比@Ralph,我會在稍後進行測試。先謝謝你們!

+0

你想要一些不同的處理對於'/'路徑,還是隻需要在'city'路徑變量不存在的時候創建'null' bean實例? –

回答

0

我猜測您使用的是@ModelAttribute方法如下所示:

@ModelAttribute("cityBean") 
public City city(@PathVariable String city) { 
    return cityService.findByName(city); 
} 

你可以做的是,更新上面的方法如下:

@ModelAttribute("cityBean") 
public City city(HttpServletRequest request) { 
    Map<String, String> pathVars = (Map<String, String>)request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); 
    if(pathVars == null || !pathVars.contains("city")) { 
     // The path variable not present, do whatever you need here. 
     return null; 
    } 
    return cityService.findByName(city); 
} 
3

使用Converter<String, City>到你的城市字符串轉換成市的對象。

public class CityConverter implements Converter<String, City> { 

    @Override 
    public City convert(final String bidString) { 
     return .... 
    } 
} 

您註冊之後該轉換器,在FormattingConversionServiceFactoryBean

<bean id="applicationConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 
    <property name="converter"> 
     <set> 
      <bean class="StingCityConverter" autowire="byType" /> 
     </set> 
    </property> 
</bean> 

您可以使用它的每一個地方,例如:

​​

我希望這回答你的問題,如果不,請嘗試重新提出您的問題以指出您的問題。

+0

Upvote from me有關我未知的功能的信息。但是,這真的會起作用嗎?這裏的[documentation](http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/validation.html#core-convert-Converter-API)表示,「對於每個呼叫要轉換(S),源參數保證是_NOT null_「。 –

+0

Bhashit Parikh:是的,它可以工作(我使用ID-> DomainEntity超過2年)。 (當然,你必須實現轉換邏輯)但是我不明白你的問題是「不是空的」? - 然後轉換器根本不被調用。 – Ralph

+0

我的意思是說,如果路徑變量丟失,如果路徑變量丟失(空),Spring不會抱怨。我會嘗試一下。謝謝。 –

相關問題