37. 省市区-获取列表-控制器层
关于需要处理的请求:
请求路径:/districts/
请求参数:String parent
请求方式:GET
响应结果:JsonResult<List<District>>
是否拦截:否,不需要登录就可以访问
由于不需要拦截,所以,先在拦截器的配置类InterceptorConfigurer
类中添加/district/**
到白名单!
先在cn.tedu.store.controller
包中创建DistrictController
类,继承自BaseController
,在类的声明之前添加@RestController
和@RequestMapping("districts")
注解,并在类中声明@Autowired private IDistrictService districtService;
业务接口:
/**
* 处理省/市/区数据相关请求的控制器类
*/
@RestController
@RequestMapping("districts")
public class DistrictController extends BaseController {
@Autowired
private IDistrictService districtService;
}
然后,在类中添加处理请求的方法:
// http://localhost:8080/districts/?parent=86
@GetMapping({"", "/"})
public JsonResult<List<District>> getByParent(String parent) {
// 调用业务对象获取数据
// 返回OK与数据
}
38. 省市区-获取列表-前端页面
39. 省市区-根据行政代号获取名称-持久层
需要执行的SQL语句大致是:
select name from t_dict_district where code=?
在DistrictMapper
接口中添加抽象方法:
/**
* 根据省/市/区的行政代号查询名称
* @param code 省/市/区的行政代号
* @return 匹配的省/市/区的名称,如果没有匹配的数据,则返回null
*/
String findNameByCode(String code);
在DistrictMapper.xml中配置映射:
<!-- 根据省/市/区的行政代号查询名称 -->
<!-- String findNameByCode(String code) -->
<select id="findNameByCode"
resultType="java.lang.String">
SELECT
name
FROM
t_dict_district
WHERE
code=#{code}
</select>
在DistrictMapperTests
中测试:
@Test
public void findNameByCode() {
String code = "110000";
String name = mapper.findNameByCode(code);
System.err.println("name=" + name);
}
40. 省市区-根据行政代号获取名称-业务层
在IDistrictService
接口中添加:
/**
* 根据省/市/区的行政代号查询名称
* @param code 省/市/区的行政代号
* @return 匹配的省/市/区的名称,如果没有匹配的数据,则返回null
*/
String getNameByCode(String code);
在DistrictServiceImpl
类中实现以上方法:
@Override
public String getNameByCode(String code) {
return districtMapper.findNameByCode(code);
}
在DistrictServiceTests
中测试:
@Test
public void getNameByCode() {
String code = "110000";
String name = service.getNameByCode(code);
System.err.println("name=" + name);
}
41. 收货地址-增加-业务-补
在增加收货地址的业务中,需要补全“根据已知的行政代号获取对应的名称”!
先在AddressServiceImpl
中添加处理省市区数据的业务对象:
@Autowired
private IDistrictService districtService;
在插入收货地址数据之前,补充补全数据:
String provinceCode = address.getProvinceCode();
String provinceName = districtService.getNameByCode(provinceCode);
address.setProvinceName(provinceName);
String cityCode = address.getCityCode();
String cityName = districtService.getNameByCode(cityCode);
address.setCityName(cityName);
String areaCode = address.getAreaCode();
String areaName = districtService.getNameByCode(areaCode);
address.setAreaName(areaName);
42. 收货地址-显示列表-持久层
显示某用户的收货地址列表,需要执行的SQL语句大致是:
select * from t_address where uid=? order by is_default desc, modified_time desc
作业:参考“获取全国所有省”的功能,开发至控制器层,通过http://localhost:8080/addresses
可以获取当前登录的用户的收货地址列表数据!