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回答
-
hi 同学,首先非常赞!!!经过思考的一个好问题,是这样的,springmvc的注解是为了校验,那里面的false,只会拦截请求。
后续我们会演进到spring的校验框架,另外一个问题就是 service里面这个用的是&&,是为了做一个&判断,就是说没有关键字并且分类是空的情况,而isBlank和null是两回事。可以看看isBlank的源码~~
然后你说的在视频里补传递没有报错。如果你的代码和视频里的一致的话,结果应该是一样的,可以使用beyond compare软件比较一下两个java文件的异同呢?
132017-06-19 -
qq_北城以北_7
2017-08-22
我的理解是这两个参数可以有一个是空的,但是不能同时为空,同时为空继续执行下面的查询代码就没有意义了,@RequestParam里面的required = false两个查询参数都写了是为了有其中一个参数为空的情况准备的。
20 -
EverL
2017-06-19
这点还是讨论一下的比较好,个人认为老师回答的比较模糊 required=false,前端不传值默认为null, 而null使用StringUtils.isBlank返回的是true, categoryId也是true, 则进入createByError。 则出现楼主所说的问题
10 -
Geely
2017-06-20
00
相似问题