- AutoPrefixUrlMapping.java
public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {
@Value("${api-package}")
private String apiPackagePath;
@Override
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
RequestMappingInfo mappingInfo = super.getMappingForMethod(method, handlerType);
if(mappingInfo != null){
String prefix = this.getPrefix(handlerType);
return RequestMappingInfo.paths(prefix).build().combine(mappingInfo);
}
return mappingInfo;
}
private String getPrefix(Class<?> handlerType){
String packageName = handlerType.getPackage().getName();
String dotPath = packageName.replaceAll(this.apiPackagePath,"");
return dotPath.replace(".", "/");
}
}
- AutoPrefixConfiguration.java
@Configuration
public class AutoPrefixConfiguration implements WebMvcRegistrations {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new AutoPrefixUrlMapping();
}
}
api-package: com.example.demo
@RestController
@RequestMapping("/demo")
public class DemoController {
@GetMapping("/a")
public ResponseEntity getUser() {
return ResponseEntity.status(HttpStatus.OK).body("22");
}
请求地址:http://localhost:8080/api/demo/a