2014-09-25 90 views
2

是否可以使用預定義的參數集創建與Spring MVC @RequestMapping等效的Java註釋?使用Spring MVC創建註解設置@RequestMapping參數

例如,一些讓我簡單地使用:的

@PostJson("/input") 
public Output myMethod(Input input) { 

代替:

@RequestMapping(value = "/input", 
    method = RequestMethod.POST, 
    produces = MediaType.APPLICATION_JSON_VALUE, 
    consumes = MediaType.APPLICATION_JSON_VALUE) 
public Output myMethod(Input input) { 

UPDATE: 讓我試着挖得更深一些。 AFAIK,Spring似乎能夠在掃描bean時處理元註釋。舉例來說,如果我創建一個註解,讓說@MyComponent,並標註其與@Component:

@Component 
public @interface MyComponent { 
    String value() default ""; 
} 

春天似乎能夠找到豆@MyComponent和識別參數(在這種情況下值)@ MyComponent的如同它們是從@Component

@MyComponent("MyBean") 
public class SomeClass { 

我tryed類似策略與@RequestMapping

@RequestMapping(method = RequestMethod.POST, 
    produces = MediaType.APPLICATION_JSON_VALUE) 
public @interface PostJson { 
    String value() default ""; 
} 

固定參數(方法的產生)似乎是COR但是,可變參數(值)被忽略。

我希望這不是@Component特定的功能,我可以使用它@RequestMapping。

+0

因此,不,@元件的元註釋行爲不適用於@ @ RequestMapping。正如我下面所述,'@ RequestMapping'由'RequestMappingHandlerMapping'處理,它不檢查其他內容。 – 2014-09-26 15:39:41

回答

3

不容易,沒有。 @RequestMapping註釋綁定到RequestMappingHandlerMappingRequestMappingHandlerAdapter。當您提供<mvc:annotation-driven />@EnabledWebMvc時,這些是默認註冊的MVC堆棧的兩個元素。他們只掃描@Controller@RequestMapping,沒有別的。

爲了使自己的註釋工作,你必須重寫(並註冊)這兩個或從頭開始創建新的提供處理程序方法的掃描和處理。 You can get some inspiration from those classes和其他HandlerMapping implementations,但它確實不是一個簡單的任務。

您可能想要查看Java Restful Web Services,它可以很好地與Spring集成(不一定是Spring MVC)。當你確切地知道你想要什麼時,它可以提供一些不那麼臃腫的映射註釋。

0

雖然目前不支持這個功能,但會是(感謝創建https://jira.spring.io/browse/SPR-12296!),這並不難。如果您查看RequestMappingHandlerMapping,受保護的方法getMappingForMethod接受一個方法,並返回一個RequestMappingInfo,其中填充了來自類型+方法級別@RequestMapping註釋的信息。然而,你可以從任何東西中填充這個RequestMappingInfo,例如您自己的註釋或其他來源(外部路線配置)。只需按照該代碼的例子。

相關問題