用户名重复时抛出的异常为null

用户名重复时抛出的异常为null

老师,我看了问答区所有的相关问题,这个问题好像并没有得到真正解决呀

http://img1.sycdn.imooc.com//climg/602177d509eeb5b406500212.jpg

http://img1.sycdn.imooc.com//climg/602177ea0928169d12060576.jpghttp://img1.sycdn.imooc.com//climg/602177ff092e398a08870690.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小班 2021-02-09 13:58:11

同学你好,1、没有正确捕获异常,对应抛出的信息就是这样格式的。

http://img1.sycdn.imooc.com//climg/60222111099eeab602210211.jpg

如果正确捕获这个异常,对应就是自定义的msg、data、status这样格式的数据

http://img1.sycdn.imooc.com//climg/6022213109450fb401700114.jpg

    2、当在UserServiceImpl里面得抛出的用户名重复异常,那在对应的controller中是否有正确的捕获或抛出这个异常吗。

    ​3、同学在自己的GlobalExceptionHandler中是否正确配置@ControllerAdvice这个注解,这个注解就是拦截程序中抛出的异常。

    ​4、问一下同学的启动类是个controller是同一级目录吗?

http://img1.sycdn.imooc.com//climg/6022246b09f2670502410227.jpg

祝学习愉快!

幕布斯2414477 提问者 2021-02-09 02:36:25

老师,这个问题我看了好久。参考了https://class.imooc.com/course/qadetail/251079 这个问题。

@PostMapping("/register")
@ResponseBody
public ApiRestResponse register(@RequestParam("username") String username ,
@RequestParam("password") String password) throws ImoocMallException {
if (StringUtils.isEmpty(username)){
return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_USER_NAME);
}

正常进行/register方法时,返回的是json格式的ApiRestResponse对象的三个属性,这个应该和toString方法无关。

但是在GlobalExceptionHandler还没有定义得时候, 以下UserController里的三个异常可以正常抛出,因为他返回的ApiRestResponse对象

@PostMapping("/register")
@ResponseBody
public ApiRestResponse register(@RequestParam("username") String username ,
@RequestParam("password") String password) throws ImoocMallException {
if (StringUtils.isEmpty(username)){
return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_USER_NAME);
}
if (StringUtils.isEmpty(password)){
return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_PASSWORD);
}
//密码长度不能小于八位
   if (password.length() < 8){
return ApiRestResponse.error(ImoocMallExceptionEnum.PASSWORD_TOO_SHORT);
}
userService.register(username,password);
return ApiRestResponse.success();
}}

可是在UserServiceImpl里面得抛出的用户名重复异常,就会有timestamp, error ,path这些标签? 这是为什么呢?并且按照按照你视频代码敲下来message一直返回得是空值

@Override
public void register(String username, String password) throws ImoocMallException {
//查询用户名是否存在,不允许重名
   User result = userMapper.selectByName(username);
System.out.println("UseService register result :" + result);
if (result != null){
throw new ImoocMallException(ImoocMallExceptionEnum.NAME_EXISTED);
}



  • 这个问题有没有得到解决呢?

    2021-03-05 07:26:42
  • 同学你好,抛出的异常为null,建议同学看一下统一异常类ImoocMallException中,属性和get方法是否一致。

    如下:

    http://img1.sycdn.imooc.com//climg/60431933094d077900000000.jpg

    祝学习愉快~

    2021-03-06 13:57:06
  • http://img1.sycdn.imooc.com//climg/6049ce7a09dd8f0710840731.jpg

    看一下自定义异常类,自定义异常类中这个不是简单地get方法,而是重写了父类Exception的getMessage方法,把异常枚举的message返回出去,这样才能获取到message

    2021-03-11 16:03:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师