【问题标题】:How exclude some paths from @GetMapping spring annotation?如何从@GetMapping spring 注释中排除一些路径?
【发布时间】:2018-06-19 19:38:20
【问题描述】:

我使用Spring Boot,我的主控制器处理所有顶级网址:

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {
    @GetMapping({"/*"})
    public ResponseEntity<String> handleIndex() {
        // ...
    }
}

由于某些原因,我希望从处理我的控制器中排除路径 /exclude_path

类似这样的:

@GetMapping(include={"/*"}, exclude={"/exclude_path"})

你能回答我怎么做吗?

【问题讨论】:

  • 如果你不把它放在GetMapping里面是不会被处理的。不知道这里有什么问题。
  • @pvpkiran,我的路径中有通配符 /*,并且只想排除一个映射到该通配符的 url (/exclude_path)。
  • 只需为该特定处理添加另一个映射,例如“AcccessNotAllowed”或 404NotFound 之类的东西。

标签: java spring spring-mvc spring-boot


【解决方案1】:

首先,/* 是一种不好的做法。如果你想这样做,你最好的选择是为你的控制器引入一个方面。并将其过滤掉。
这样的事情会做:

@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public void requestMapping() {}

@Pointcut("within(blah.blah.package.controller.*)")
public void myController() {}

@Around("requestMapping() && myController()")
public Object logAround(ProceedingJoinPoint joinPoint, RequestMapping requestMapping) throws Throwable {  
    String url = requestMapping.value();
    // check the url and based on that do  
    // joinPoint.proceed();
}

【讨论】:

  • 这个答案已经过时了。
【解决方案2】:

您应该删除“/*”,因为它会删除所有请求。只提供你想要的路径,这样你就不需要 /excludepath。

【讨论】:

  • 我有单页应用程序,我不管理前端。如果我删除 /*,我将不得不在我的代码中编写每个新的 url。
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2015-12-29
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多