springboot默认找不到路径会去找页面,如图:
但是我并不希望它没有完全匹配的路径后显示这个页面,而是执行我的自定义结果类的json字符串,现在能实现效果但是会优先执行匹配这个路径,正常的话我这里的message会返回请求方法不支持
customController.java
@RestController
public class CustomController {
@RequestMapping("/**")
public Result resourceNotFound(HttpServletRequest request) {
return Result.wrong(ResultEnum.resourceNotFound.getCode(),ResultEnum.resourceNotFound.getMessage(),request.getRequestURI());
}
}
任意一个controller
@RestController
@RequestMapping("/member")
public class MemberController {
@Resource
private MemberService memberService;
@PostMapping("/login")
public Result login(@RequestBody LoginDto loginDto) {
LoginDto login = memberService.login(loginDto);
Map<String,Object> map = new HashMap<>();
map.put("token", JwtUtil.createToken(login.getId(),login.getUsername(),login.getJurisdictionId(),login.getStatus()));
return Result.successful(map);
}
}
我试过了网上的很多方法发现都没有用,有没有什么办法能解决?
引用 皆我百晓生 小程序回复内容作答:
您可以通过自定义一个全局异常处理器来实现您的需求。在异常处理器中捕捉到路径不存在的异常后,返回您自定义的json字符串而不是默认的错误页面。
以下是一个示例的全局异常处理器实现:
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = { NoHandlerFoundException.class })
protected ResponseEntity<Object> handleNoHandlerFoundException(
NoHandlerFoundException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
String message = "请求方法不支持";
return buildResponseEntity(Result.wrong(ResultEnum.resourceNotFound.getCode(),
ResultEnum.resourceNotFound.getMessage(), message));
}
private ResponseEntity<Object> buildResponseEntity(Result result) {
return new ResponseEntity<>(result, HttpStatus.OK);
}
}
请确保您已添加了以下依赖以使用@ControllerAdvice和ResponseEntityExceptionHandler:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
通过以上的配置,当路径不存在时将会返回您自定义的json字符串,而不是默认的错误页面。
你好,你是要在请求不存在的路径的时候,返回你需要的自定义json数据吗?如果是的话,我这有篇文章可以参考,文章的3.1自定义Error数据部分,需要自定义一个类,继承DefaultErrorAttributes,然后在实现方法中自定义返回信息,设置后应该能满足你的要求,参考链接如下
https://blog.csdn.net/m0_58815972/article/details/126335489
【相关推荐】
主要是对接口的返回值类型做一个修改,并且对返回的参数做一个封装
@RestController
@Api(tags = "用户操作")
public class UserController {
@Autowired
private UserDao userDao;
@GetMapping("/users")
@ApiOperation(value = "获取用户列表", notes = "获取所有的user信息")
public Result getUserList() {
List<User> userList = userDao.getUserList();
return Result.ok(userList);
}
}
启动去swagger中测试,发现我们的结果返回已经成了json的形式
对于Result的引入还是很简单的