Migo商城2.0 门户首页左侧商品类目显示 十四
新建后台提供系统服务,这里就不再新建专门提供服务的项目了(也是因为访问的网址里有rest这个字眼了)
先看下jd的商品类目返回的数据格式:

因为扒的页面是jd之前的,没有添加这么多,缺少了1 3 4部分,其实也就添加了几个键值对,不影响数据结构的设计
本项目要实现的数据结构(部分数据):
1 | { |

因为没有设计专门的rest服务工程,这里将结构pojo放在common工程中以供通用,代码如下:
1 | package com.migo.pojo; |
1 | package com.migo.pojo; |
为更好的符合类的名字的含义,和更好的理解性,对ItemCatResult 稍做改造
1 | package com.migo.pojo; |
前台访问的URL : URL_Serv: "http://tomcat.migo.com/rest/webs/item/cat?callback=category.getDataService" lib-v1.js 1173行
后台代码:
service
从tb_item_cat表中取数据,单表查询,可以使用通用mapper
返回结果:ItemCatResult
参数:没有
业务逻辑:根据parentid查询子节点列表,并递归调用
1 | /** |
controller
1 | package com.migo.controller.webs; |
测试:

因为前端门户系统访问后台服务系统相当于跨域请求,这里,得使用jsonp,不了解的可以谷歌一下,回头有时间我会安利一下这个东西的原理,其实很简单,无非就是访问个js片段,具体看下面三点
1、 jsonp通过script标签的src可以跨域请求的特性,加载资源
2、 将加载的资源(通过一个方法名将数据进行包裹)当做是js脚本解析
3、 定义一个回调函数,获取传入的数据
添加callback参数
修改controller代码
MappingJacksonValue要求springmvc必须是4.1以上版本。
1 | package com.migo.controller.webs; |
运行结果:

进一步改造jsonp的支持
这是之前写的一个关于消息转换器的Demo,拿出一个类来足以说明了,看代码注释即可(可以处理输入和输出)
1 | package com.zhiqiu.messageconverter; |
因为StringHttpMessageConverter默认字符集为ISO-8859-1 如下部分源码码所示,修改springmvc配置文件的 mvc:annotation-driven,在自定义的转换器里去做就可以了,这里重写上面的 writeInternal方法
1 | public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> { |
在common工程中添加自定义消息转换器
1 | package com.migo.messageconverter; |
在manage工程中配置springmvc.xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
controller修改如下
1 | package com.migo.controller.webs; |
重启项目进行测试:结果如下图:
