springboot如何为web层添加统一请求前缀

目录
  • 如何为web层添加统一请求前缀
    • 配置文件方式
    • 实现WebMvcConfigurer接口
  • spring web访问页面出现多余前缀和后缀情况
    • 页面中出现hello.jsp
    • 解决方法

如何为web层添加统一请求前缀

配置文件方式

application.properties全局配置文件配置:

server.servlet.context-path=/api

实现WebMvcConfigurer接口

重写configurePathMatch()方法,代码:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {    
    /**
     * 请求路径添加统一前缀
     *
     * @param configurer
     */
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.addPathPrefix("/api", c -> c.isAnnotationPresent(RestController.class) || c.isAnnotationPresent(Controller.class));
    }
}

上面为controller层所有都添加了统一前缀,如果不同版本想使用不同的请求前缀,可优化如下:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {    
    /**
     * 请求路径添加统一前缀
     *
     * @param configurer
     */
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.addPathPrefix("/api", c -> c.isAnnotationPresent(ApiRestController.class))
            .addPathPrefix("/api/v2", c -> c.isAnnotationPresent(ApiV2RestController.class));
    }
}

对有 @ApiRestController 注解的 controller 添加 /api 前缀,对有@ApiV2RestController 注解的controller添加 /api/v2 前缀。

@ApiRestController 和 @ApiV2RestController 是自定义注解,继承自 @RestController:

import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.lang.annotation.*;
 
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RestController
@RequestMapping
public @interface ApiRestController {
    /**
     * Alias for {@link RequestMapping#name}.
     */
    @AliasFor(annotation = RequestMapping.class)
    String name() default "";
 
    /**
     * Alias for {@link RequestMapping#value}.
     */
    @AliasFor(annotation = RequestMapping.class)
    String[] value() default {};
 
    /**
     * Alias for {@link RequestMapping#path}.
     */
    @AliasFor(annotation = RequestMapping.class)
    String[] path() default {};
}

使用:

@ApiRestController("/demo")
public class DemoController extends BaseController{
}

这样请求地址就成了:http://localhost:8080/api/demo

spring web访问页面出现多余前缀和后缀情况

页面中出现hello.jsp

解决方法

去掉servlet中的前缀后缀配置项

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 在SpringBoot项目中实现给所有请求加固定前缀

    目录 给所有请求加个固定前缀 知识小锦囊 配置文件读取(固定前缀) 1.配置文件所有固定前缀的都可以使用 2.SpringBoot实体类 3.使用方式 给所有请求加个固定前缀 在开发中,可能会遇到需要配置项目前缀的问题,虽然我们可以在Controller控制器方法中给所有请求加前缀,但是不仅比较麻烦,而且在某种环境下是没什么用处,形同虚设 接下来,教你在配置文章中只需短短一小行代码配置即可生效 知识小锦囊 在yml配置文件中加入配置: server.servlet.context-path: /

  • springboot 配置文件配置项前缀为0的数字特殊处理方式

    目录 配置文件配置项前缀为0的数字处理 问题 解决方法 源码类分析 yml配置文件中写以数字0开头的值 记一次springboot踩的坑 配置文件配置项前缀为0的数字处理 问题 spring boot yml配置文件中 ,配置前缀0的数字时,会被特殊处理,如下图配置04100 会当做八进制数处理成2112 解决方法 配置项两边加引号,这时会当做字符串处理 源码类分析 ConstructYamlInt 分析源码可知: 1.以0b开头的数字,会被当做二进制数处理 2.以0x开头的数字,会被当做十六进

  • SpringBoot使用前缀树过滤敏感词的方法实例

    目录 一.前缀树 二.敏感词过滤器 总结 一.前缀树 一般设计网站的时候,会有问题发布或者是内容发布的功能,这些功能的有一个很重要的点在于如何实现敏感词过滤,要不然可能会有不良信息的发布,或者发布的内容中有夹杂可能会有恶意功能的代码片段,敏感词过滤的基本的算法是前缀树算法,前缀树也就是字典树,通过前缀树匹配可以加快敏感词匹配的速度. 前缀树又称为Trie.字典树.查找树.主要特点是:查找效率高,但内存消耗大:主要应用于字符串检索.词频统计.字符串排序等. 到底什么是前缀树?前缀树的功能是如何实现

  • springboot controller 增加指定前缀的两种实现方法

    目录 controller 增加指定前缀 1.增加配置 2.过滤拦截 springboot服务端口.项目前缀的配置 在application.properties中配置 controller 增加指定前缀 1.增加配置 server.servlet.context-path: /api 这种是最常见的,加上这个配置后,所有的url,必须带上/api的前缀,才能访问到该url 2.过滤拦截 这种是加上/api也可以访问,不加/api也可以访问,适合项目重构修改的适合用 import org.apa

  • SpringBoot2.x实现给Controller的RequestMapping添加统一前缀

    目录 给Controller的RequestMapping添加统一前缀 总结一下 有几个方法 springboot项目添加全局前缀 spring的配置 spring boot的配置 给Controller的RequestMapping添加统一前缀 如何给Controller的RequestMapping添加统一前缀,比如"/api",为什么要添加统一访问前缀,其实是为了后面的接口的管理. 切记:约定与规范好过一切技术处理 ! 比如: 项目A必须所有访问接口URL必须增加 /api/pr

  • springboot如何为web层添加统一请求前缀

    目录 如何为web层添加统一请求前缀 配置文件方式 实现WebMvcConfigurer接口 spring web访问页面出现多余前缀和后缀情况 页面中出现hello.jsp 解决方法 如何为web层添加统一请求前缀 配置文件方式 application.properties全局配置文件配置: server.servlet.context-path=/api 实现WebMvcConfigurer接口 重写configurePathMatch()方法,代码: @Configuration publ

  • Spring Boot中使用AOP统一处理web层异常的方法

    在springboot错误默认是跳转到 请求返回渲染路径中的error/错误页面中. 源码分析:DefaultErrorViewResolver.java private ModelAndView resolve(String viewName, Map<String, Object> model) { String errorViewName = "error/" + viewName; TemplateAvailabilityProvider provider = th

  • SpringBoot 统一请求返回的实现

    目前我们的返回是直接把实体类扔给请求方,这样很不友好,一方面没有统一的格式,二来请求方不知道请求成功与否,没有一个可以判断的东西,也没有说明性的返回. 本篇就来为所有接口提供一个统一的友好返回. 确定返回结构 首先,我们先确定好我们接口返回的格式是什么样的,然后再一步一步实现下面的. { "code": 200, "msg": "ok", "data": "" } code 字段表示状态码,调用方根据该码来

  • SpringBoot中配置Web静态资源路径的方法

    介绍: 本文章主要针对web项目中的两个问题进行详细解析介绍:1- 页面跳转404,即controller转发无法跳转页面问题:2- 静态资源文件路径问题. 项目工具: Intelij Idea, JDK1.8, SpringBoot 2.1.3 正文: 准备工作:通过Idea创建一个SpringBoot-web项目,此过程不做赘述,创建完成后项目结构如下图: 1- 创建一个controller代码如下: package com.example.webpractice.controller; i

  • springboot创建的web项目整合Quartz框架的项目实践

    目录 介绍 基于springboot创建的web项目整合Quartz框架 依次实现mvc三层 介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序.Jobs可以做成标准的Java组件或EJBs.Quartz的最新版本为Quartz 2.3.2. quartz可以在某一个有规律的时间点干某件事,是一个任务调度框

  • SpringBoot全局Controller返回值格式统一

    目录 一.返回值格式统一 1.返回值介绍 2.基础类功能 3.基础实现 二.附录说明 一.返回值格式统一 1.返回值介绍 在使用controller对外提供服务的时候,很多时候都需要统一返回值格式,例如 { "status": true, "message": null, "code": "200", "data": { "name": "json", "d

  • Springboot+netty实现Web聊天室

    目录 一.项目的创建 二.代码编写 三.运行效果 一.项目的创建 新建Spring项目: 选择JDK版本: 选择Spring Web: 项目名称和位置的设置: 二.代码编写 导入.jar包: gson: https://search.maven.org/artifact/com.google.code.gson/gson/2.8.9/jar DemoApplication: package com.example.demo; import org.springframework.boot.Spr

  • Springboot项目异常处理及返回结果统一

    目录 背景 返回结果定义 异常的定义 异常的处理 返回结果的处理 完整代码 使用示例 背景 在创建项目的初期,我们需要规范后端返回的数据结构,以便更好地与前端开发人员合作. 比如后端返回的数据为: {  "msg": "请跳转登陆页面", } 此时前端无法确定后端服务的处理结果是成功的还是失败的.在前端展示页面,成功与失败的展示是要作区分的,甚至不同的成功或失败结果要做出不同的展现效果,这也就是我们为什么要对返回结果做出统一规范的原因. 返回结果定义 public

  • 秒杀系统Web层设计的实现方法

    秒杀系统Web层设计的实现方法 一.Restful接口设计 使用资源+名词的方式来为url链接命名.例如: 访问详情页的链接可以是: seckill/{seckillId}/detail 二.SpringMVC配置 1.首先要在web.xml中配置中央控制器. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q

随机推荐