|
|
|
@ -26,16 +26,31 @@ import java.util.Enumeration;
|
|
|
|
|
* @CONTACT 317758022@qq.com
|
|
|
|
|
* @DESC 都需要先登陆才可以看到地址或者操作地址
|
|
|
|
|
*/
|
|
|
|
|
// @RestController是Spring框架提供的一个复合注解,它结合了@Controller和@ResponseBody注解的功能,表明这个类是一个处理HTTP请求的控制器类,并且方法的返回值会直接以JSON等格式响应给客户端,无需额外配置视图解析等操作。
|
|
|
|
|
// 这里@RequestMapping注解在类级别上指定了该控制器类处理的请求的基础路径为"/shipping/",意味着这个类中所有方法处理的请求路径都以"/shipping/"开头。
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping("/shipping/")
|
|
|
|
|
// 使用lombok的@Slf4j注解,用于自动生成日志相关的代码,方便在类中记录各种操作相关的日志信息,便于后续查看请求处理情况以及进行问题排查,比如记录请求参数、处理结果以及出现异常时的详细错误信息等。
|
|
|
|
|
@Slf4j
|
|
|
|
|
// 该类继承自BaseController类,意味着它可以继承BaseController中定义的属性和方法,比如获取当前用户信息的方法等,便于在当前控制器类的各个方法中复用相关逻辑。
|
|
|
|
|
public class ShippingController extends BaseController{
|
|
|
|
|
|
|
|
|
|
// 通过Spring的依赖注入机制,使用@Autowired注解自动注入IShippingService接口的实现类实例,IShippingService应该是定义了与地址相关的业务逻辑方法的接口,比如添加、删除、更新地址等操作,具体的业务实现由对应的实现类来完成。
|
|
|
|
|
@Autowired
|
|
|
|
|
private IShippingService shippingService;
|
|
|
|
|
// 同样通过@Autowired注解注入CommonCacheUtil类型的实例,CommonCacheUtil类应该是用于操作缓存(可能是Redis等缓存)的工具类,在一些方法中会借助它来获取缓存中的用户信息等数据。
|
|
|
|
|
@Autowired
|
|
|
|
|
private CommonCacheUtil commonCacheUtil;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 该方法用于处理添加地址的HTTP请求,对应"/shipping/add.do"这个请求路径。
|
|
|
|
|
* 首先,通过调用父类(BaseController)的getCurrentUser方法,从传入的HTTP请求中获取当前登录用户的信息,这个方法内部会进行一系列验证,比如检查用户是否登录等操作,如果用户未登录会抛出相应异常。
|
|
|
|
|
* 获取到当前用户后,将用户的ID以及要添加的地址信息(Shipping类型的对象,应该包含了地址的详细内容,如收件人、地址、联系方式等)传递给shippingService的add方法,由具体的业务实现类来处理添加地址的逻辑,并返回一个ServerResponse类型的响应对象,这个对象会包含操作的结果状态、提示消息以及可能的业务数据等信息,最终将这个响应对象返回给客户端,告知客户端添加地址操作的结果。
|
|
|
|
|
*
|
|
|
|
|
* @param httpServletRequest 表示HTTP请求对象,通过它可以获取客户端发送过来的各种信息,包括用于获取当前用户信息的相关数据(如Cookie等),同时也可以传递一些请求相关的参数等。
|
|
|
|
|
* @param shipping 表示要添加的地址信息对象,包含了地址相关的详细内容,作为参数传递给业务层方法用于添加地址操作。
|
|
|
|
|
* @return 返回一个ServerResponse类型的响应对象,包含了添加地址操作的结果相关信息,例如操作是否成功、提示消息以及可能的业务数据等,客户端会接收到这个响应对象并根据其中的信息进行相应处理。
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* 添加地址
|
|
|
|
|
*/
|
|
|
|
@ -45,6 +60,14 @@ public class ShippingController extends BaseController{
|
|
|
|
|
return shippingService.add(user.getId(),shipping);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 该方法用于处理删除地址的HTTP请求,对应"/shipping/del.do"这个请求路径。
|
|
|
|
|
* 同样先通过调用父类的getCurrentUser方法获取当前登录用户信息,然后将用户的ID以及要删除的地址的ID(Integer类型的shippingId参数,表示要删除的地址在系统中的唯一标识)传递给shippingService的del方法,由业务实现类来处理删除地址的具体逻辑,最后返回包含操作结果信息的ServerResponse响应对象给客户端,告知客户端删除地址操作是否成功等情况。
|
|
|
|
|
*
|
|
|
|
|
* @param httpServletRequest 表示HTTP请求对象,用于获取当前用户信息以及传递请求相关的参数等。
|
|
|
|
|
* @param shippingId 表示要删除的地址在系统中的唯一标识,作为参数传递给业务层方法用于确定要删除的具体地址。
|
|
|
|
|
* @return 返回一个ServerResponse类型的响应对象,包含了删除地址操作的结果相关信息,供客户端根据其中的信息进行相应处理。
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* 删除地址
|
|
|
|
|
*/
|
|
|
|
@ -54,6 +77,14 @@ public class ShippingController extends BaseController{
|
|
|
|
|
return shippingService.del(user.getId(),shippingId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 该方法用于处理更新地址的HTTP请求,对应"/shipping/update.do"这个请求路径。
|
|
|
|
|
* 先是调用父类方法获取当前登录用户信息,接着将用户的ID以及包含更新后地址信息的Shipping对象(shipping参数,包含了更新后的地址相关详细内容)传递给shippingService的update方法,由业务实现类按照业务逻辑来更新地址信息,并返回一个ServerResponse响应对象给客户端,告知客户端更新地址操作的结果情况。
|
|
|
|
|
*
|
|
|
|
|
* @param httpServletRequest 表示HTTP请求对象,用于获取当前用户信息以及传递更新地址相关的参数等。
|
|
|
|
|
* @param shipping 表示包含更新后地址信息的对象,作为参数传递给业务层方法用于更新地址操作。
|
|
|
|
|
* @return 返回一个ServerResponse类型的响应对象,包含了更新地址操作的结果相关信息,供客户端进行相应处理。
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* 更新地址
|
|
|
|
|
*/
|
|
|
|
@ -63,6 +94,14 @@ public class ShippingController extends BaseController{
|
|
|
|
|
return shippingService.update(user.getId(),shipping);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 该方法用于处理选择选中地址的HTTP请求,对应"/shipping/select.do"这个请求路径。
|
|
|
|
|
* 先从HTTP请求中获取当前登录用户信息(通过调用父类方法),然后将用户的ID以及要选择的地址的ID(shippingId参数)传递给shippingService的select方法,由业务实现类来处理选择地址的具体逻辑,最后返回包含操作结果信息的ServerResponse响应对象给客户端,告知客户端选择地址操作是否成功等情况。
|
|
|
|
|
*
|
|
|
|
|
* @param httpServletRequest 表示HTTP请求对象,用于获取当前用户信息以及传递请求相关的参数等。
|
|
|
|
|
* @param shippingId 表示要选择的地址在系统中的唯一标识,作为参数传递给业务层方法用于确定要选择的具体地址。
|
|
|
|
|
* @return 返回一个ServerResponse类型的响应对象,包含了选择地址操作的结果相关信息,供客户端根据其中的信息进行相应处理。
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* 选择选中的地址
|
|
|
|
|
*/
|
|
|
|
@ -72,6 +111,15 @@ public class ShippingController extends BaseController{
|
|
|
|
|
return shippingService.select(user.getId(),shippingId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 该方法用于处理获取地址列表的HTTP请求,对应"/shipping/list.do"这个请求路径。
|
|
|
|
|
* 首先通过调用父类方法获取当前登录用户信息,然后将用户的ID以及分页相关的参数(pageNum表示当前页码,默认值为1;pageSize表示每页显示的记录数,默认值为10,通过@RequestParam注解从请求中获取并设置默认值)传递给shippingService的list方法,由业务实现类根据用户ID和分页参数来查询并返回相应的地址列表信息,最终以ServerResponse<PageInfo>类型的响应对象返回给客户端,其中PageInfo应该是包含了分页相关信息以及地址列表数据的对象,客户端可以根据响应获取到地址列表并进行展示等操作。
|
|
|
|
|
*
|
|
|
|
|
* @param httpServletRequest 表示HTTP请求对象,用于获取当前用户信息以及传递分页相关的请求参数等。
|
|
|
|
|
* @param pageNum 表示当前页码,通过请求参数获取,默认值为1,如果请求中未传递该参数则使用默认值,用于确定要获取哪一页的地址列表信息。
|
|
|
|
|
* @param pageSize 表示每页显示的记录数,通过请求参数获取,默认值为10,用于确定每页展示的地址数量,业务实现类会根据这个参数进行分页查询操作。
|
|
|
|
|
* @return 返回一个ServerResponse<PageInfo>类型的响应对象,包含了地址列表查询操作的结果相关信息,如操作是否成功、提示消息以及包含地址列表和分页信息的PageInfo对象等,客户端可据此进行相应处理,比如展示地址列表等操作。
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* 地址列表
|
|
|
|
|
*/
|
|
|
|
@ -83,6 +131,17 @@ public class ShippingController extends BaseController{
|
|
|
|
|
return shippingService.list(user.getId(),pageNum,pageSize);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 该方法用于处理根据地址ID获取地址详细信息的HTTP请求,对应"/shipping/getShipping.do"这个请求路径。
|
|
|
|
|
* 首先通过日志记录开始根据给定的地址ID(shippingId参数)获取地址信息的操作,然后尝试从HTTP请求的头部信息中获取用户登录相关的令牌(Cookie)信息,通过遍历请求头的所有名称(使用Enumeration来遍历,httpServletRequest.getHeaderNames方法获取所有头部名称的枚举),查找名为"snailmall_login_token"(忽略大小写比较,通过equalsIgnoreCase方法)的头部信息,获取其对应的值(即登录令牌)。
|
|
|
|
|
* 如果获取到的登录令牌值为空(StringUtils.isBlank判断),则记录错误日志并返回一个表示用户未登录的ServerResponse响应对象,使用ResponseEnum.NEED_LOGIN中定义的状态码和描述信息告知客户端用户未登录,无法获取地址信息。
|
|
|
|
|
* 接着,如果获取到了登录令牌值,就通过注入的CommonCacheUtil实例,以登录令牌作为键从缓存中获取对应的用户信息字符串(userJsonStr),如果获取到的用户信息字符串为null,说明缓存中不存在用户信息或者出现其他异常情况,此时记录错误日志并返回同样表示用户未登录的ServerResponse响应对象。
|
|
|
|
|
* 如果成功从缓存中获取到了用户信息字符串,就通过JsonUtil.Str2Obj方法(JsonUtil是用于处理JSON序列化和反序列化的工具类)将用户信息字符串反序列化为User类型的对象,同时记录获取到的用户信息日志,最后将用户的ID以及要获取的地址的ID传递给shippingService的getShippingById方法,由业务实现类根据ID获取地址详细信息,并返回包含操作结果和地址信息的ServerResponse响应对象给客户端,告知客户端获取地址操作的结果情况。
|
|
|
|
|
*
|
|
|
|
|
* @param httpServletRequest 表示HTTP请求对象,用于获取请求头部的登录令牌信息以及传递请求相关的参数等,同时也可以获取其他一些请求相关的数据用于后续操作。
|
|
|
|
|
* @param shippingId 表示要获取详细信息的地址在系统中的唯一标识,作为参数传递给业务层方法用于确定要获取的具体地址。
|
|
|
|
|
* @return 返回一个ServerResponse类型的响应对象,包含了根据地址ID获取地址操作的结果相关信息以及可能的地址详细信息,客户端会根据其中的信息进行相应处理,比如展示地址详情等操作。
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* 根据id获取地址
|
|
|
|
|
*/
|
|
|
|
@ -91,7 +150,7 @@ public class ShippingController extends BaseController{
|
|
|
|
|
log.info("【开始根据{}获取地址】",shippingId);
|
|
|
|
|
User user = null;
|
|
|
|
|
Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
|
|
|
|
|
if (headerNames != null) {
|
|
|
|
|
if (headerNames!= null) {
|
|
|
|
|
while (headerNames.hasMoreElements()) {
|
|
|
|
|
String name = headerNames.nextElement();
|
|
|
|
|
if(name.equalsIgnoreCase("snailmall_login_token")){
|
|
|
|
@ -117,4 +176,4 @@ public class ShippingController extends BaseController{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|