簡體   English   中英

為基於注釋的Spring MVC控制器設置混合配置

[英]Setting up a mixed configuration for annotation-based Spring MVC controllers

我的Spring 3.x項目中有許多帶有各種請求處理程序的控制器(所有基於注釋的,使用@Controller@RequestMapping )。

目前,應用程序上下文只定義了DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter bean。 如果我理解正確,也可以用<mvc:annotation-driven/>替換它們。
現有的控制器主要填充通過參數傳入的模型,然后將視圖名稱作為字符串返回。 映射由標准DefaultRequestToViewNameTranslatorInternalResourceViewResolver bean完成。

現在我想介紹一個新的控制器,它需要一個HttpMessageConverter (它將是一個MappingJacksonHttpMessageConverter )和一個特定於該控制器的HandlerExceptionResolver

不應以任何方式影響現有控制器。 它們的請求和響應都不應由消息轉換器轉換,異常解析器也不應處理任何異常。


有沒有辦法在不刪除新控制器的基於注釋的配置的情況下執行此操作? 有沒有辦法專門為一個控制器設置消息轉換器和異常解析器,而不放棄基於@RequestMapping的URL路由?

或者有沒有辦法在控制器上使用注釋選擇轉換器/解析器配置?

如果沒有,那么下一個最佳方法是什么?

如果您使用@ExceptionHandler注釋您的方法,因為它在此處說明它將僅處理放置它的控制器方法拋出的異常。 所以它不會影響其他的。

關於HttpMessageConverter,我不確定我要說的是否可以應用於HttpMessageConverter(因為我從未使用它,我不確定它是否可以被視為其他轉換器),但是如果你可以創建一個用它來轉換你可以在控制器中做這樣的事情:

@Autowired
private ConversionService conversionService;

@InitBinder
public void initBinder(WebDataBinder binder){
    binder.setConversionService(conversionService);
}

而conversionService只會應用於此initBinder的控制器方法。

在特殊情況下,控制器之間沒有媒體類型的重疊(例如,一個接受並僅響應JSON,所有其他接收/響應XML),您可以依賴於Spring的Content-TypeAccept頭匹配來執行映射到相應的HttpMessageConverter。

但這並不能解決原始問題。 如果您足夠幸運能夠處於這種特殊情況,這只是一種解決方法。 您也無法阻止一個控制器取消/響應它不應該支持這種方式的媒體類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM