springboot找不到路径自定义json字符串

springboot找不到路径自定义json字符串

springboot默认找不到路径会去找页面,如图:

img

但是我并不希望它没有完全匹配的路径后显示这个页面,而是执行我的自定义结果类的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注解来声明这是一个全局异常处理器。@ExceptionHandler注解用于指定要处理的异常类型,这里我们指定了NoHandlerFoundException,即路径不存在的异常。在handleNoHandlerFoundException方法中,我们构建了自定义的结果类Result,并通过ResponseEntity返回该结果类。

请确保您已添加了以下依赖以使用@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

【相关推荐】



  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7500430
  • 除此之外, 这篇博客: (七) spring boot 接口返回结果封装&&对象json的转换中的 在controller中的修改 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    主要是对接口的返回值类型做一个修改,并且对返回的参数做一个封装

    @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的引入还是很简单的


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^