我是靠谱客的博主 美好烤鸡,最近开发中收集的这篇文章主要介绍spring boot 根据目录结构自动生成路由前缀,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. 新建一个类 继承 RequestMappingHandlerMapping

​ 重写 getMappingForMethod 方法

package com.boot.missyou.core.hack;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

import java.lang.reflect.Method;

public class AutpPrefixMapping extends RequestMappingHandlerMapping {
    @Value("${missyou.api-package}")
    private String  packagePath;


    @Override
    protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
      RequestMappingInfo reinfo =  super.getMappingForMethod(method, handlerType);
      if (reinfo!=null) {
          String prefix = this.getPrefix(handlerType);
          // 替换并且合并为新路径
          RequestMappingInfo  newrequestMappingInfo =RequestMappingInfo.paths(prefix).build().combine(reinfo);
          return newrequestMappingInfo;
      }
      return reinfo;
    }
    //  获取前缀
    public  String  getPrefix(Class<?> handlerType) {
       String packName =  handlerType.getPackage().getName();
       String doPath = packName.replaceAll(this.packagePath, "");
       return doPath.replace(".","/");
    }
}
  1. 重新一个类让容器发现 AutpPrefixMapping 类 采用 @Component + 继承 WebMvcRegistrations
package com.boot.missyou.core.congiguration;

import com.boot.missyou.core.hack.AutpPrefixMapping;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
@Component
public class AutoPrefixConfigration implements WebMvcRegistrations {

    @Override
    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
        return  new AutpPrefixMapping();
    }
}
  1. 添加配置 属性

application.properties

missyou.api-package = com.boot.missyou.api

为了 可以在类中访问到

  1. 添加 controller
package com.boot.missyou.api.v1;
import com.boot.missyou.exception.http.ForbiddenException;
import com.boot.missyou.service.BannerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(value = "轮播图", tags = {"用于轮播图的相关接口"})
@RestController
@RequestMapping("/banner")
public class BannerController {
    @Autowired
    private BannerService bannerService;
    @ApiOperation(value = "轮播图", notes = "轮播图", httpMethod = "GET")
    @GetMapping("/test")
    public String test() {
        throw new ForbiddenException(1001);
//        return "hell cworld111333";
    }
}

这个 controller 位于 v1 的包下

  1. 测试

最后

以上就是美好烤鸡为你收集整理的spring boot 根据目录结构自动生成路由前缀的全部内容,希望文章能够帮你解决spring boot 根据目录结构自动生成路由前缀所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部