请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

ProductController.java中list方法问题

在list方法中

@RequestParam(value = "keyword",required = false)String keyword,
 @RequestParam(value = "categoryId",required = false)Integer categoryId,

但是在ProductServiceImpl.java中的getProductByKeywordCategory方法里,又对这两个参数进行是否为空的校验:

  if(StringUtils.isBlank(keyword) && categoryId == null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
        }

这样是不是自相矛盾呢?

这样的话,在测试过程中,发现不传递keyword categoryId这两个参数就会报ILLEGAL_ARGUMENT的错误,把上面的校验部分的代码注释掉就不会出现这样的问题了,但是视频中测试过程中不传递categoryId这个参数并没有报错,而且结果正常

正在回答

4回答

hi 同学,首先非常赞!!!经过思考的一个好问题,是这样的,springmvc的注解是为了校验,那里面的false,只会拦截请求。

后续我们会演进到spring的校验框架,另外一个问题就是 service里面这个用的是&&,是为了做一个&判断,就是说没有关键字并且分类是空的情况,而isBlank和null是两回事。可以看看isBlank的源码~~


然后你说的在视频里补传递没有报错。如果你的代码和视频里的一致的话,结果应该是一样的,可以使用beyond compare软件比较一下两个java文件的异同呢?

1 回复 有任何疑惑可以回复我~
  • 提问者 RedWay #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2017-05-10 08:55:53
  • 提问者 RedWay #2
    谢谢Geely老师的解答,后来自己仔细看了下,是我自己的代码有误,把&&写成||导致出现这样的情况,看来码代码还需要更认真
    回复 有任何疑惑可以回复我~ 2017-05-10 08:58:09
  • EverL #3
    这点还是讨论一下的比较好,个人认为老师回答的比较模糊
    required=false,前端不传值默认为null, 而null使用StringUtils.isBlank返回的是true, categoryId也是true, 则进入createByError。
    则出现楼主所说的问题
    回复 有任何疑惑可以回复我~ 2017-06-19 16:31:52
qq_北城以北_7 2017-08-22 11:25:48

我的理解是这两个参数可以有一个是空的,但是不能同时为空,同时为空继续执行下面的查询代码就没有意义了,@RequestParam里面的required = false两个查询参数都写了是为了有其中一个参数为空的情况准备的。

2 回复 有任何疑惑可以回复我~
EverL 2017-06-19 16:32:13

这点还是讨论一下的比较好,个人认为老师回答的比较模糊 required=false,前端不传值默认为null, 而null使用StringUtils.isBlank返回的是true, categoryId也是true, 则进入createByError。 则出现楼主所说的问题

1 回复 有任何疑惑可以回复我~
Geely 2017-06-20 00:31:58

www.imooc.com/learn/558


同学可以来看看这个数据绑定的内容。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信