Spring 启动休息 API 在端点无效的情况下不会失败



我正在使用 spring boot 编写一个 RESTful Web 服务。我正在使用 jwt 持有者令牌进行身份验证和授权。

下面是我的休息控制器

@RestController("api/v1/users")
public class UserController {
@Autowired
UserService userService;
@PostMapping
public User saveUser(@RequestBody User user) {
return userService.saveUser(user);
}
@GetMapping
public List<User> getUsers(@RequestParam(required = false) String pageNumber, String pageSize, String role, String status) {
return userService.findAll(pageNumber, pageSize, role, status);
}
}

当我使用请求网址点击 api 时

http://localhost:8080/api/v1/users?pageNumber=0&pageSize=6&role=admin

它的工作完美

但是如果我将 url 端点更改为一些无效的端点,例如

http://localhost:8080/api/v1/hhh?pageNumber=0&pageSize=6&role=admin

它仍然返回与第一个正确端点相同的结果。

以下是来自 springframework 调试日志记录的一些日志语句

正在检查请求的匹配项:"/api/v1/hhh";反对 '/api/test/secureTest'

2019-12-28 19:16:47.601 调试 5591 --- [NIO-8080-exec-5] o.s.s.w.u.matcher.AntPathRequestMatcher : 正在检查请求的匹配: '/api/v1/hhh';针对"API/身份验证">

2019-12-28 19:16:47.601 调试 5591 --- [NIO-8080-exec-5] o.s.s.w.u.matcher.AntPathRequestMatcher : 正在检查请求的匹配: '/api/v1/hhh';反对 '/api/v1/users/me'

2019-12-28 19:16:47.601 调试 5591 --- [NIO-8080-exec-5] o.s.s.w.u.matcher.AntPathRequestMatcher : 正在检查请求的匹配: '/api/v1/hhh';针对"/API/v1/student">

2019-12-28 19:16:47.601 调试 5591 --- [NIO-8080-exec-5] o.s.s.w.u.matcher.AntPathRequestMatcher : 正在检查请求的匹配: '/api/v1/hhh';反对 '/api/v1/faculty'

2019-12-28 19:16:47.601 调试 5591 --- [NIO-8080-exec-5] o.s.s.w.u.matcher.AntPathRequestMatcher : 正在检查请求的匹配: '/api/v1/hhh';反对 '/api/v1/admin'

2019-12-28 19:16:47.601 调试 5591 --- [NIO-8080-exec-5] o.s.s.w.u.matcher.AntPathRequestMatcher : 正在检查请求的匹配: '/api/v1/hhh';针对"/API/v1/users">

2019-12-28 19:16:47.601 调试 5591 --- [NIO-8080-exec-5] o.s.s.w.a.i.FilterSecurityInterceptor : Public Object - 未尝试身份验证

2019-12-28 19:16:47.601 调试 5591 --- [NIO-8080-exec-5] o.s.security.web.FilterChainProxy :/api/v1/hhh?pageNumber=0&pageSize=6&role=admin 已到达末尾 额外的过滤器链;继续使用原始链

2019-12-28 19:16:47.602 跟踪 5591 --- [NIO-8080-exec-5] o.s.web.servlet.DispatcherServlet : GET "/api/v1/hhh?pageNumber=0&pageSize=6&role=admin", parameters={masked}, headers={masked} in DispatcherServlet 'dispatcherServlet'

2019-12-28 19:16:47.602 跟踪 5591 --- [NIO-8080-exec-5]o.s.b.f.s.DefaultListableBeanFactory : 返回缓存实例 单例 Bean 'API/v1/users'

2019-12-28 19:16:47.602 跟踪 5591 --- [NIO-8080-exec-5] s.w.s.m.m.a.RequestMappingHandlerMapping : 映射到公共 java.util.list com.asset.app.user.UserController.getUsers(java.lang.String,java.lang.String,java.lang.String,java.lang.String(

2019-12-28 19:16:47.602 跟踪 5591 --- [NIO-8080-exec-5] .w.s.m.m.a.ServletInvocableHandlerMethod : Arguments: [0, 6, admin, 空]

我觉得 Spring 缓存端点 url 并在找不到匹配项时使用

知道如何阻止这种情况吗?

如果您阅读了 API 文档@RestController

您会看到注释构造函数采用描述为以下内容的value

该值可能指示对逻辑组件名称的建议,以 在自动检测组件的情况下变成春豆。

因此,它用于为创建 vill 的Bean设置名称。

用于像您所做的那样设置 url 映射。

@RestController("api/v1/users")

您需要用@RequestMapping注释您的类,并添加对@PostMapping@GetMapping的映射。

@RestController
@RequestMapping("/api/v1") // Add request mapping
public class FooBar {
@PostMapping("/users") // Add mapping here
public User bar() {
...
}
@GetMapping("/users") // Add mapping here
public List<User> foo() {
...
}
}

最新更新