是否可以使用预定义的一组参数创建与Spring MVC @RequestMapping等效的Java注释?
例如,允许我简单使用的东西:
@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) {
更新: 让我试着深入挖掘一下。 AFAIK,Spring似乎能够在扫描bean时处理元注释。例如,如果我创建一个注释,让我们说@MyComponent,并使用@Component注释它:
@Component
public @interface MyComponent {
String value() default "";
}
Spring似乎能够找到带有@MyComponent的bean并且能够识别@MyComponent中的参数(在这种情况下为值),就像它们来自@Component
一样@MyComponent("MyBean")
public class SomeClass {
我尝试过与@RequestMapping相似的策略
@RequestMapping(method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
public @interface PostJson {
String value() default "";
}
固定参数(生成的方法)似乎是正确的,但是,忽略了变量参数(值)。
我希望这不是@Component特定的功能,我可以将它与@RequestMapping一起使用。
答案 0 :(得分:3)
不容易,不。 @RequestMapping
注释与RequestMappingHandlerMapping
和RequestMappingHandlerAdapter
相关联。这些是默认情况下在您提供<mvc:annotation-driven />
或@EnabledWebMvc
时注册的MVC堆栈的两个元素。他们只扫描@Controller
和@RequestMapping
,没有别的。
要使自己的注释工作,您必须覆盖(并注册)这两个注释,或者从头开始创建新的注释,以提供处理程序方法的扫描和处理。 You can get some inspiration from those classes和其他HandlerMapping
implementations,但这不是一项简单的任务。
或许,您可能希望研究Java Restful Web Services,它可以很好地与Spring集成(不一定是Spring MVC)。当您确切知道自己想要什么时,它可以提供一些不那么臃肿的映射注释。
答案 1 :(得分:0)
虽然目前不支持开箱即用(但感谢创建https://jira.spring.io/browse/SPR-12296!),但这并不难。如果查看RequestMappingHandlerMapping,则受保护的方法getMappingForMethod接受一个方法,并返回一个RequestMappingInfo,其中填充了类型+方法级别@RequestMapping注释中的信息。但是,您可以从任何内容填充此RequestMappingInfo,例如您自己的注释,或其他一些来源(外部路由配置)。只需按照那里的代码示例。