spring mvc 如何取消 .映射

不及物动词 其他 18

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Spring MVC中,URL映射是通过在@Controller注解下的方法上使用@RequestMapping注解来实现的。如果想要取消URL中的点(.)映射,可以通过在@RequestMapping注解中使用正则表达式来匹配URL。

    下面是一种取消点映射的方式:

    1. 创建自定义的RequestMappingHandlerMapping
      可以通过继承RequestMappingHandlerMapping类,然后重写其methodRequiresLowerCaseUrl()方法来取消URL中的点映射。该方法控制着Spring MVC是否将URL中的点作为有效字符进行匹配。
    import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
    
    public class CustomRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
        @Override
        protected boolean methodRequiresLowerCaseUrl() {
            return false;
        }
    }
    
    1. 配置自定义的RequestMappingHandlerMapping
      在Spring MVC的配置文件中,将自定义的RequestMappingHandlerMapping添加到配置中。
    <mvc:annotation-driven>
        <mvc:argument-resolvers>
            <bean class="org.springframework.web.method.support.CompositeUriComponentsContributor">
                <constructor-arg>
                    <list>
                        <bean class="org.springframework.web.util.UrlPathHelper"/>
                        <bean class="org.springframework.web.method.annotation.RequestHeaderMethodArgumentResolver"/>
                    </list>
                </constructor-arg>
            </bean>
        </mvc:argument-resolvers>
        <mvc:handler-adapters>
            <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
                <property name="messageConverters">
                    <list>
                        <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
                        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
                    </list>
                </property>
            </bean>
        </mvc:handler-adapters>
        <mvc:interceptors>
            <ref bean="webContentInterceptor"/>
        </mvc:interceptors>
    </mvc:annotation-driven>
    
    <!-- 添加自定义的RequestMappingHandlerMapping -->
    <bean class="com.example.CustomRequestMappingHandlerMapping"/>
    

    这样配置后,Spring MVC将取消URL中的点映射,从而实现了取消点映射的目的。

    总结起来,取消Spring MVC中的点映射,需要通过创建自定义的RequestMappingHandlerMapping,并在配置文件中添加该自定义类的配置。这样就能够实现取消点映射的功能。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在Spring MVC中取消映射(或者称为取消URL重定向),可以通过以下几种方式来实现:

    1. 使用@RequestMapping注解的"-"或者""来取消映射:
      在Spring MVC中,使用@RequestMapping注解来映射URL请求到对应的处理方法上。如果要取消原有的映射,可以将@RequestMapping注解中的value属性设置为"-"或者"",表示取消对应的映射。

    例如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping(value = "/login", method = RequestMethod.GET)
        public String login() {
            ...
        }
    
        @RequestMapping(value = "/-")
        public String cancelMapping() {
            // 取消映射
        }
    }
    
    1. 使用通配符或正则表达式取消映射:
      可以使用通配符或正则表达式来匹配多个URL路径,从而实现取消映射的效果。可以使用"?"表示匹配任意一个字符,使用"*"表示匹配任意多个字符,使用"**"表示匹配多层路径。

    例如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping(value = {"/**/login", "/**/logout"})
        public String cancelMapping() {
            // 取消映射
        }
    }
    
    1. 使用RedirectView类实现URL重定向:
      如果映射的URL路径需要重定向到其他页面,可以使用RedirectView类来实现。使用RedirectView可以设置重定向的URL路径。

    例如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping(value = "/login")
        public RedirectView login() {
            RedirectView redirectView = new RedirectView();
            redirectView.setUrl("https://www.example.com/login");
            return redirectView;
        }
    }
    
    1. 使用配置文件取消映射:
      在Spring MVC的配置文件中,可以使用mvc:exclude-mapping标签来取消URL映射。可以在该标签中配置要取消映射的URL路径。

    例如:

    <mvc:exclude-mapping path="/user/login"/>
    
    1. 使用拦截器取消映射:
      通过自定义实现HandlerInterceptor接口的拦截器,在拦截器中判断是否需要取消映射。可以通过return false来取消映射。

    例如:

    public class MappingInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // 判断是否需要取消映射
            if (...)
                return false;
            else
                return true;
        }
    }
    
    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    取消Spring MVC中的"."映射有两种常见的方法,分别是使用路径变量和设置匹配选项。

    1. 使用路径变量:
      Spring MVC提供了路径变量的功能,可以在@RequestMapping注解中使用{variable}的方式来获取URL中的动态部分。通过将"."部分作为路径变量的一部分,可以绕过"."的映射问题。下面是具体的操作流程:

      1. 在@RequestMapping注解中使用"{variable}"来表示路径变量。例如,使用@RequestMapping("/users/{id}")来匹配"/users/1"这样的URL。
      2. 在方法中使用@PathVariable注解来获取路径变量的值。例如,使用@PathVariable("id") Integer id来获取URL中的"id"部分。

      示例代码如下所示:

    @Controller
    @RequestMapping("/users")
    public class UserController {
    
        @GetMapping("/{id}")
        public String getUser(@PathVariable("id") Integer id) {
            // 根据id查询用户信息
            return "user";
        }
    }
    
    1. 设置匹配选项:
      Spring MVC提供了一些配置选项来改变URL的匹配行为,其中一项是"."的匹配选项。通过设置useSuffixPatternMatch属性为false,可以取消对"."的匹配。下面是具体的操作流程:

      1. 在Spring的配置文件中找到mvc:annotation-driven标签。
      2. 在该标签中添加useSuffixPatternMatch属性,并设置为false,即useSuffixPatternMatch="false"。

      示例代码如下所示:

    <mvc:annotation-driven useSuffixPatternMatch="false"/>
    

    这样配置后,Spring MVC将不再将"."当作URL的一部分来匹配,而只会将"/"当作URL的分隔符。

    需要注意的是,取消"."的映射可能会导致其他问题,例如静态资源的访问。因此,在取消"."的映射之前,需要仔细考虑可能带来的影响,确保在项目中没有其他地方依赖"."的映射。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部