Java拍卖平台标题搜索接口Optional查询参数编写问题排查
问题排查与修改方案
现有代码的核心问题
- 接口定义不符合需求:要求是在原有
list()接口上新增参数,而非单独新增searchByTitle接口;@RequestMapping的value属性配置非法,GET请求不允许用@RequestBody接收查询参数,应该改用@RequestParam注解接收title_like查询字符串参数,同时设置可选、默认值为空字符串。 - 业务逻辑完全错误:
MemoryAuctionDao已经提供了searchByTitle方法可以直接返回符合条件的商品列表,不需要自行循环遍历;原有判断逻辑dao.searchByTitle(title_like).contains(title_like)完全不成立,该方法返回的是Auction对象列表,不可能匹配String类型的搜索词。 - 返回值不符合要求:搜索词为空时返回了
null,按照要求应该返回全量拍卖商品列表;循环中直接修改全局auctions列表并提前返回,会导致全局数据污染,且仅能返回第一个匹配的商品,不符合返回所有匹配结果的要求。
正确实现代码
// 直接修改原有list接口,无需新增单独接口 @RequestMapping(value = "/auction/list", method = RequestMethod.GET) public List<Auction> list(@RequestParam(value = "title_like", required = false, defaultValue = "") String titleLike) { if (!titleLike.isEmpty()) { // 直接调用dao提供的搜索方法返回匹配结果 return dao.searchByTitle(titleLike); } // 无搜索参数时返回原有全量列表即可 return dao.listAll(); }
注:如果原有list()接口的默认分支已经实现了全量列表返回逻辑,仅需新增参数和搜索分支即可,不需要修改原有默认逻辑。
内容的提问来源于stack exchange,提问作者user15764259
相关产品推荐
相关产品推荐

