所以我在控制器中有一堆嵌套的路由。如果特定的嵌套路由不存在,我想确保应用程序引发错误。现在,如果嵌套级别大于2,则应用程序返回,null而不是抛出错误,指出找不到路由。
例:
@RestController @RequestMapping(value="v1/") public class EmployeeController {
@Autowired
EmployeeRepository employeeRepository;
// Get Token Info
@RequestMapping(value = "read/tokenInfo", method = RequestMethod.GET)
public Token getTokenInfo(@AuthenticationPrincipal Token token) {
return token;
}
// List of all employees.
@GetMapping(path = "read/list")
public List<Employee> getAllEmployees() {
return employeeRepository.findAll();
}
在上面的代码中,假设该路由 v1/read/tokenInfo具有3个分段-v1,read和tokenInfo。如果我输错了路线,然后尝试类似的操作- v1/read/tokeninfosss而不显示错误,它将返回200OK并null显示消息。
响应: 响应
但是,如果该路线只有2个级别-如下所示-
@RestController @RequestMapping(value="v1/") public class EmployeeController {
@Autowired
EmployeeRepository employeeRepository;
// Get Token Info
@RequestMapping(value = "tokenInfo", method = RequestMethod.GET)
public Token getTokenInfo(@AuthenticationPrincipal Token token) {
return token;
}
现在,如果我致电- v1/tokenInfosss,则会引发错误 -404错误: 404错误
我还配置了以下安全性-
@Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests()
.antMatchers("/local/").permitAll() .antMatchers("/v1/read/").hasAuthority("Display") .antMatchers("/v1/modify/**").hasAuthority("Update") .anyRequest().authenticated() .and() .oauth2ResourceServer() .jwt() .jwtAuthenticationConverter(getJwtAuthenticationConverter()); } 任何想法如何配置此404错误?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Spring Boot应用中,确保对不存在的嵌套路由引发404错误通常涉及到调整Spring MVC配置以正确处理未找到的请求。以下是一些建议来解决你的问题:
@ControllerAdvice
来定义一个全局异常处理器,捕获并自定义特定异常的响应。对于路由不存在的情况,你需要关注的是org.springframework.web.servlet.NoHandlerFoundException
。@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NoHandlerFoundException.class)
public ResponseEntity handleNotFoundError(NoHandlerFoundException ex, WebRequest request) {
// 自定义错误信息或日志记录
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Endpoint not found.");
}
}
确保Spring Security配置允许404错误传递:有时候,安全配置可能会拦截404错误页面,确保你的Spring Security配置没有无意中阻止了这些错误消息的正常返回。你可能不需要对此进行更改,但要确认这一点。
检查资源路径和静态资源处理:虽然这不太可能是你的问题所在,但确保Spring Boot的静态资源处理没有意外地“吃掉”了那些本应导致404错误的请求。在application.properties
或application.yml
中检查与静态资源相关的配置。
启用 TRACE 日志级别:为了更深入地了解请求是如何被处理的,可以临时将Spring MVC和Spring Security的日志级别设置为TRACE。这可以帮助你跟踪请求从接收到处理的完整流程,从而找出为何某些请求没有正确返回404错误。
验证@RequestMapping注解的使用:确保所有端点都正确使用了@RequestMapping及其变体(如@GetMapping、@PostMapping等),并且没有不匹配的路径或方法级别的映射覆盖了预期的错误行为。
如果以上步骤都不能解决问题,可能需要更详细地检查你的应用程序配置,特别是与视图解析器、异常处理以及Spring Security相关部分,以确定是否有其他配置干扰了正常的错误处理流程。