ProductController.java中list方法问题

来源:8-8 前台商品详情,列表,搜索,动态排序功能开发

RedWay

2017-05-09

在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回答

Geely

2017-05-09

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

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


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

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

qq_北城以北_7

2017-08-22

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

2
0

EverL

2017-06-19

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

1
0

Geely

2017-06-20

www.imooc.com/learn/558


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

0
0

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9476 学习 · 8804 问题

查看课程