
最近在写毕业设计,需要使用SpringBoot+MyBatis来完成,在写的时候,本来是使用下面的代码来实现访问/api/user/get这种形式的路由,但是发现每一次都要去重复写@RestController和@RequestMapping,一点也不优美,于是便想到了使用自定义注解来完成此功能。
@RestController
@RequestMapping("/api/user")
public class UserController {
@GetMapping("/test")
public Map<Object, Object> test() {
return Result.success("测试成功");
}
}像下图这样实现注解类,就自动集成了@RestController和@RequestMapping两个注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RestController
@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public @interface ApiRestController {
@AliasFor(annotation = RequestMapping.class)
String name() default "";
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
}@Configuration
public class ApiPrefixAutoConfiguration implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
// 使用自定义注解@ApiRestController时添加前缀/api
configurer.addPathPrefix("/api", c -> c.isAnnotationPresent(ApiRestController.class));
}
}这样的话,我们就可以使用@ApiRestController来替换掉@RestController和@RequestMapping注释,而且还可以自动添加路由前缀,简直优美的不得了,使用效果就像下面这样:
http://127.0.0.1/api/user/test
@ApiRestController('/user')
public class UserController {
@GetMapping("/test")
public Map<Object, Object> test() {
return Result.success("测试成功");
}
}原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。