商品搜索
需求
分析
- head.jsp中调用search函数,参数值为key。
- 这个search函数在base-v1.js中,包含请求url。
- 响应的search.jsp中需要通过调用服务获取一些参数,包含商品列表、查询字符串、分页信息。
- 注意item中需要包含图片列表的images属性,而数据库中image字段是用逗号分隔的url,需要转换。
http://192.168.57.139/2018/04/14/1523681619033411.jpg,http://192.168.57.139/2018/04/14/1523681619250477.jpg,http://192.168.57.139/2018/04/14/1523681619979646.jpg
总结
Service层
- pojo包下创建SearchResult和Item这两个类。Item中的images属性将image转换为Url的数组。
public class SearchResult {
private List<Item> list;
private long recordCount;
private long pageCount;
private long curPage;
}
public class Item {
private String id;
private String title;
private String sellPoint;
private long price;
/**
* 使用,分隔的多个图片url
*/
private String image;
private String categoryName;
private String itemDesc;
/**
* 图片url的数组
*/
private String[] images;
public String[] getImages() {
if (images == null) {
setImages(image.split(","));
}
return images;
}
public void setImages(String[] images) {
this.images = images;
}
}
- rest.properties中配置搜索服务的url。
#搜索服务基础url
SEARCH_SERVICE_URL=http:
- 创建SearchService和实现类,根据查询字符串和页码,调用searh工程提供的服务,查询结果。
@Service
public class SearchServiceImpl implements SearchService {
@Value("${SEARCH_SERVICE_URL}")
private String SEARCH_SERVICE_URL;
@Override
public SearchResult search(String queryString, int page) {
Map<String, String> params = new HashMap<>();
params.put("q", queryString);
params.put("page", String.valueOf(page));
try {
String res = HttpClientUtil.doGet(SEARCH_SERVICE_URL, params);
TaotaoResult taotaoResult = TaotaoResult.formatToPojo(res, SearchResult.class);
if (taotaoResult.getStatus() == 200) {
SearchResult result = (SearchResult) taotaoResult.getData();
return result;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Controller层
- 创建SearchController,接收查询字符串和页码,调用Service层,回显参数和逻辑视图。
@Controller
public class SearchController {
@Autowired
private SearchService searchService;
@RequestMapping("/search")
public String search(@RequestParam("q") String queryString, @RequestParam(defaultValue = "1") Integer page,
Model model) {
SearchResult searchResult = searchService.search(queryString, page);
model.addAttribute("query", queryString);
model.addAttribute("totalPages", searchResult.getPageCount());
model.addAttribute("itemList", searchResult.getList());
model.addAttribute("page", page);
return "search";
}
}
运行工程