@ -36,60 +36,89 @@ import com.wsk.tool.Pornographic;*/
@Slf4j
@Slf4j
public class UserController {
public class UserController {
// 使用@Resource注解注入UserInformationService, 用于处理用户信息相关的业务逻辑, 比如查询、更新用户的基本信息等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private UserInformationService userInformationService ;
private UserInformationService userInformationService ;
// 使用@Resource注解注入UserPasswordService, 用于处理用户密码相关业务逻辑, 由Spring框架自动装配
@Resource
@Resource
private UserPasswordService userPasswordService ;
private UserPasswordService userPasswordService ;
// 使用@Resource注解注入UserCollectionService, 用于处理用户收藏相关业务逻辑, 由Spring框架自动装配
// 使用@Resource注解注入UserCollectionService, 用于处理用户收藏相关的业务逻辑, 像添加、删除用户的收藏记录等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private UserCollectionService userCollectionService ;
private UserCollectionService userCollectionService ;
// 使用@Resource注解注入UserReleaseService, 用于处理用户发布相关业务逻辑( 从变量名推测, 具体需看业务) , 由Spring框架自动装配
// 使用@Resource注解注入UserReleaseService, 从变量名推测可能用于处理用户发布相关的业务逻辑( 具体需看业务实现) , 例如用户发布商品、发布动态等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private UserReleaseService userReleaseService ;
private UserReleaseService userReleaseService ;
// 使用@Resource注解注入BoughtShopService, 从变量名推测可能用于处理用户购买店铺相关的业务逻辑( 具体需看业务实现) , 比如记录用户购买店铺的信息、查询已购买店铺列表等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private BoughtShopService boughtShopService ;
private BoughtShopService boughtShopService ;
// 使用@Resource注解注入UserWantService, 用于处理用户求购相关的业务逻辑, 例如用户发布求购信息、查询自己的求购记录等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private UserWantService userWantService ;
private UserWantService userWantService ;
// 使用@Resource注解注入ShopCarService, 从变量名推测可能用于处理购物车相关的业务逻辑( 具体需看业务实现) , 像添加商品到购物车、修改购物车中商品数量等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private ShopCarService shopCarService ;
private ShopCarService shopCarService ;
// 使用@Resource注解注入OrderFormService, 用于处理订单表单相关的业务逻辑, 比如创建订单、查询订单状态等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private OrderFormService orderFormService ;
private OrderFormService orderFormService ;
// 使用@Resource注解注入GoodsOfOrderFormService, 从变量名推测可能用于处理订单表单中商品相关的业务逻辑( 具体需看业务实现) , 例如查看订单中包含的商品详情、修改订单商品数量等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private GoodsOfOrderFormService goodsOfOrderFormService ;
private GoodsOfOrderFormService goodsOfOrderFormService ;
// 使用@Resource注解注入UserStateService, 从变量名推测可能用于处理用户状态相关的业务逻辑( 具体需看业务实现) , 比如设置用户的在线、离线状态, 或者判断用户是否被封禁等状态相关操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private UserStateService userStateService ;
private UserStateService userStateService ;
// 使用@Resource注解注入ShopInformationService, 用于处理店铺信息相关的业务逻辑, 例如查询店铺详情、更新店铺信息等操作, 由Spring框架自动装配对应的实现类。
@Resource
@Resource
private ShopInformationService shopInformationService ;
private ShopInformationService shopInformationService ;
// 使用@Resource注解注入GoodsCarService, 从变量名推测可能用于处理商品车( 可能类似购物车, 具体看业务) 相关的业务逻辑, 像管理商品车中的商品等操作, 由Spring框架自动装配对应的实现类。
// 使用@Resource注解注入GoodsCarService, 用于处理商品车( 可能类似购物车, 具体看业务) 相关业务逻辑, 由Spring框架自动装配
@Resource
@Resource
private GoodsCarService goodsCarService ;
private GoodsCarService goodsCarService ;
// 使用@Resource注解注入SpecificeService, 具体业务逻辑需看其具体实现( 从变量名较难准确判断, 可能是特定业务相关) , 由Spring框架自动装配
@Resource
@Resource
private SpecificeService specificeService ;
private SpecificeService specificeService ;
// 使用@Resource注解注入ClassificationService, 可能用于分类相关业务逻辑( 从变量名推测) , 由Spring框架自动装配
@Resource
@Resource
private ClassificationService classificationService ;
private ClassificationService classificationService ;
// 使用@Resource注解注入AllKindsService, 具体业务不太明确( 从变量名较难准确判断) , 由Spring框架自动装配
@Resource
@Resource
private AllKindsService allKindsService ;
private AllKindsService allKindsService ;
// 使用@Resource注解注入ShopContextService, 可能用于店铺上下文相关业务逻辑( 从变量名推测) , 由Spring框架自动装配
@Resource
@Resource
private ShopContextService shopContextService ;
private ShopContextService shopContextService ;
//进入登录界面
// 处理进入登录界面的请求, 使用GET方法访问/login.do路径时触发该方法
// 返回登录页面的视图名称, 同时生成并设置token到session和model中, 用于后续验证等操作
@RequestMapping ( value = "/login.do" , method = RequestMethod . GET )
@RequestMapping ( value = "/login.do" , method = RequestMethod . GET )
public String login ( HttpServletRequest request , Model model ) {
public String login ( HttpServletRequest request , Model model ) {
// 通过单例模式获取TokenProccessor实例, 并生成一个token, 用于标识本次登录请求等相关操作( 具体看业务)
String token = TokenProccessor . getInstance ( ) . makeToken ( ) ;
String token = TokenProccessor . getInstance ( ) . makeToken ( ) ;
// 在日志中记录进入登录界面以及生成的token信息, 方便后续查看日志排查问题
log . info ( "进入登录界面, token为:" + token ) ;
log . info ( "进入登录界面, token为:" + token ) ;
// 将生成的token设置到HttpServletRequest的session中, 方便后续在不同请求间共享这个token
request . getSession ( ) . setAttribute ( "token" , token ) ;
request . getSession ( ) . setAttribute ( "token" , token ) ;
// 将token添加到Model中, Model用于在视图渲染时传递数据, 可能在前端页面会使用到这个token
model . addAttribute ( "token" , token ) ;
model . addAttribute ( "token" , token ) ;
// 返回登录页面的视图名称,视图解析器会根据这个名称找到对应的页面进行渲染显示
return "page/login_page" ;
return "page/login_page" ;
}
}
//退出
// 处理用户退出的请求,访问/logout.do路径时触发该方法
// 移除用户相关信息在session中的属性, 然后重定向到相应页面
@RequestMapping ( value = "/logout.do" )
@RequestMapping ( value = "/logout.do" )
public String logout ( HttpServletRequest request ) {
public String logout ( HttpServletRequest request ) {
try {
try {
// 从session中移除用户信息相关的属性, 比如用户详细信息、用户ID等, 实现用户退出登录的效果
request . getSession ( ) . removeAttribute ( "userInformation" ) ;
request . getSession ( ) . removeAttribute ( "userInformation" ) ;
request . getSession ( ) . removeAttribute ( "uid" ) ;
request . getSession ( ) . removeAttribute ( "uid" ) ;
System . out . println ( "logout" ) ;
System . out . println ( "logout" ) ;
} catch ( Exception e ) {
} catch ( Exception e ) {
// 如果出现异常,打印异常栈信息方便排查问题,然后重定向到首页(这里假设/home.do是首页, 具体看配置)
e . printStackTrace ( ) ;
e . printStackTrace ( ) ;
return "redirect:/home.do" ;
return "redirect:/home.do" ;
}
}
// 正常情况下,重定向到根路径(通常是网站首页,具体看项目配置)
return "redirect:/" ;
return "redirect:/" ;
}
}
@ -233,7 +262,7 @@ public class UserController {
return map ;
return map ;
}
}
//enter the publishUserWant.do.html,进入求购页面
//enter the publishUserWant.do.html,进入求购页面 。
@RequestMapping ( value = "/require_product.do" )
@RequestMapping ( value = "/require_product.do" )
public String enterPublishUserWant ( HttpServletRequest request , Model model ) {
public String enterPublishUserWant ( HttpServletRequest request , Model model ) {
UserInformation userInformation = ( UserInformation ) request . getSession ( ) . getAttribute ( "userInformation" ) ;
UserInformation userInformation = ( UserInformation ) request . getSession ( ) . getAttribute ( "userInformation" ) ;
@ -297,88 +326,149 @@ public class UserController {
// remark = StringUtils.replaceBlank(remark);
// remark = StringUtils.replaceBlank(remark);
// name = StringUtils.getInstance().txtReplace(name);
// name = StringUtils.getInstance().txtReplace(name);
// remark = StringUtils.getInstance().txtReplace(remark);
// remark = StringUtils.getInstance().txtReplace(remark);
// 以下代码块被包含在一个方法中(从代码结构推测,不过完整方法定义未完全展示,这里主要关注这段代码逻辑),整体逻辑是对一些输入数据进行验证,
// 然后将数据封装到`UserWant`对象中,并尝试插入到数据库(通过调用`userWantService.insertSelective`方法推测是执行插入操作),根据插入结果进行不同的页面重定向操作。
try {
try {
// 检查`name`和`remark`的长度是否满足要求,若`name`的长度小于1或者`remark`的长度小于1( 说明输入的名称或者备注内容为空, 不符合要求) ,
// 又或者`name`的长度大于25或者`remark`的长度大于25( 说明输入的长度超出了限定的最大长度, 可能是为了控制数据长度避免存储或展示问题) ,
// 只要满足这些不符合要求的长度条件之一,就重定向到`require_product.do`页面,这里可能是让用户重新输入符合要求的数据。
if ( name . length ( ) < 1 | | remark . length ( ) < 1 | | name . length ( ) > 25 | | remark . length ( ) > 25 ) {
if ( name . length ( ) < 1 | | remark . length ( ) < 1 | | name . length ( ) > 25 | | remark . length ( ) > 25 ) {
return "redirect:require_product.do" ;
return "redirect:require_product.do" ;
}
}
} catch ( Exception e ) {
} catch ( Exception e ) {
// 如果在上述长度验证过程中出现异常(比如调用`length`方法出现问题等异常情况),打印异常堆栈信息(方便调试查看具体出错原因),
// 然后重定向到`require_product.do?error=1`页面,通过添加`error=1`参数可能是为了在前端页面显示相应的错误提示,告知用户出现了异常情况导致操作无法正常进行。
e . printStackTrace ( ) ;
e . printStackTrace ( ) ;
return "redirect:require_product.do?error=1" ;
return "redirect:require_product.do?error=1" ;
}
}
// 创建一个`UserWant`对象,这个对象大概率是用于封装用户相关需求信息的数据模型类(从命名和后续设置属性的操作推测),用于后续存储到数据库或者传递给其他业务逻辑处理。
UserWant userWant = new UserWant ( ) ;
UserWant userWant = new UserWant ( ) ;
// 设置`UserWant`对象的`modified`属性为当前日期时间,通过`new Date()`获取当前时间并赋值,可能用于记录该用户需求信息的修改时间等用途。
userWant . setModified ( new Date ( ) ) ;
userWant . setModified ( new Date ( ) ) ;
// 设置`UserWant`对象的`name`属性,将前面验证过长度的`name`变量的值赋给它,用于存储用户需求的名称相关信息。
userWant . setName ( name ) ;
userWant . setName ( name ) ;
// 设置`UserWant`对象的`price`属性,通过`new BigDecimal(price)`将`price`变量(应该是表示价格的数据,可能是字符串或者其他基础类型,这里转换为`BigDecimal`类型,通常用于精确的金额计算等场景)转换为`BigDecimal`类型后赋值给`price`属性,用于存储用户需求的价格相关信息。
userWant . setPrice ( new BigDecimal ( price ) ) ;
userWant . setPrice ( new BigDecimal ( price ) ) ;
// 设置`UserWant`对象的`quantity`属性,将`quantity`变量的值赋给它,用于存储用户需求的数量相关信息。
userWant . setQuantity ( quantity ) ;
userWant . setQuantity ( quantity ) ;
// 设置`UserWant`对象的`remark`属性,将前面验证过长度的`remark`变量的值赋给它,用于存储用户需求的备注相关信息。
userWant . setRemark ( remark ) ;
userWant . setRemark ( remark ) ;
// 设置`UserWant`对象的`uid`属性,通过从请求的会话(`request.getSession()`)中获取`uid`属性值(并强制转换为`Integer`类型,说明`uid`在会话中存储的应该是能转换为整数的类型,比如数字或者字符串表示的数字等),
// 这个`uid`大概率是用于标识用户的唯一ID, 用于关联该用户需求信息到具体的用户账号。
userWant . setUid ( ( Integer ) request . getSession ( ) . getAttribute ( "uid" ) ) ;
userWant . setUid ( ( Integer ) request . getSession ( ) . getAttribute ( "uid" ) ) ;
// 设置`UserWant`对象的`sort`属性,将`sort`变量的值赋给它,这里的`sort`从命名推测可能是用于表示排序相关的字段,具体作用需结合业务逻辑进一步确定。
userWant . setSort ( sort ) ;
userWant . setSort ( sort ) ;
// 定义一个变量`result`用于存储后续数据库插入操作的结果,初始化为未赋值状态,后续会根据插入操作的实际情况进行赋值并判断。
int result ;
int result ;
try {
try {
// 调用`userWantService`对象的`insertSelective`方法(这里`userWantService`应该是一个业务逻辑层的服务类,`insertSelective`方法从命名推测是执行有选择性的插入操作,可能会根据`UserWant`对象中属性的具体情况进行插入,比如某些属性为空时的特殊处理等),
// 将`userWant`对象作为参数传入, 执行插入操作, 并将返回的结果( 通常是表示插入成功的记录数等, 比如插入成功返回1, 失败返回其他值) 赋值给`result`变量。
result = userWantService . insertSelective ( userWant ) ;
result = userWantService . insertSelective ( userWant ) ;
if ( result ! = 1 ) {
// 判断插入操作的结果,如果`result`不等于1( 说明插入操作没有成功插入1条记录, 可能是插入失败或者出现了其他不符合预期的情况) ,
// 则重定向到`/require_product.do?error=2`页面,同样通过`error=2`参数可能是为了在前端页面显示相应的错误提示,告知用户插入操作出现问题。
if ( result ! = 1 ) {
// map.put("result", result);
// map.put("result", result);
return "redirect:/require_product.do?error=2" ;
return "redirect:/require_product.do?error=2" ;
}
}
} catch ( Exception e ) {
} catch ( Exception e ) {
// 如果在执行插入操作过程中出现异常(比如数据库连接问题、数据插入违反约束等异常情况),打印异常堆栈信息(方便调试查看具体出错原因),
// 然后重定向到`/require_product.do?error=2`页面,和上面插入失败的重定向页面一样,提示用户出现错误。
e . printStackTrace ( ) ;
e . printStackTrace ( ) ;
// map.put("result", result);
// map.put("result", result);
return "redirect:/require_product.do?error=2" ;
return "redirect:/require_product.do?error=2" ;
}
}
// 若插入操作成功(即`result`等于1, 没有进入上面的重定向逻辑) , 重定向到`/my_require_product.do`页面,这里可能是跳转到展示用户已成功提交的求购信息等相关页面。
// map.put("result", result);
// map.put("result", result);
return "redirect:/my_require_product.do" ;
return "redirect:/my_require_product.do" ;
}
}
//getUserWant,查看我的求购
// `getUserWant`方法,通过`@RequestMapping`注解配置了可以处理的请求路径为`/my_require_product.do`和`/my_require_product_page.do`,
// 作用应该是查看我的求购信息,从方法接收的参数以及内部逻辑来看,会从会话中获取用户信息,查询对应的求购记录,并进行一些数据格式转换后传递给视图层进行展示。
@RequestMapping ( value = { "/my_require_product.do" , "/my_require_product_page.do" } )
@RequestMapping ( value = { "/my_require_product.do" , "/my_require_product_page.do" } )
public String getUserWant ( HttpServletRequest request , Model model ) {
public String getUserWant ( HttpServletRequest request , Model model ) {
// 定义一个列表`list`,用于存储查询到的`UserWant`类型的求购信息列表,初始化为未赋值状态,后续会通过查询数据库等操作来填充数据。
List < UserWant > list ;
List < UserWant > list ;
// 从请求的会话(`request.getSession()`)中获取`userInformation`属性值(并强制转换为`UserInformation`类型,说明在会话中存储的是与用户信息相关的数据,并且类型应该是能转换为`UserInformation`类型的,比如一个存储用户详细信息的对象),
// 如果获取到的`userInformation`为空(通过`StringUtils.getInstance().isNullOrEmpty`方法判断,这里`StringUtils`应该是一个工具类,用于判断字符串或者对象是否为空等情况,`isNullOrEmpty`方法实现了具体的空值判断逻辑),
// 说明用户可能未登录或者会话中用户信息丢失等情况,此时重定向到`/login.do`页面,让用户先登录获取有效的用户信息。
UserInformation userInformation = ( UserInformation ) request . getSession ( ) . getAttribute ( "userInformation" ) ;
UserInformation userInformation = ( UserInformation ) request . getSession ( ) . getAttribute ( "userInformation" ) ;
if ( StringUtils . getInstance ( ) . isNullOrEmpty ( userInformation ) ) {
if ( StringUtils . getInstance ( ) . isNullOrEmpty ( userInformation ) ) {
return "redirect:/login.do" ;
return "redirect:/login.do" ;
}
}
try {
try {
// 从请求的会话(`request.getSession()`)中获取`uid`属性值(并强制转换为`int`类型,说明`uid`在会话中存储的应该是能转换为整数的类型,比如数字或者字符串表示的数字等),
// 这个`uid`大概率是用于标识用户的唯一ID, 用于查询该用户对应的求购信息。
int uid = ( int ) request . getSession ( ) . getAttribute ( "uid" ) ;
int uid = ( int ) request . getSession ( ) . getAttribute ( "uid" ) ;
// list = selectUserWantByUid(4);
// list = selectUserWantByUid(4);
// 调用`selectUserWantByUid`方法( 这里推测是一个数据访问层的方法, 用于根据用户ID查询该用户的求购信息列表) , 传入获取到的`uid`作为参数,查询该用户对应的求购信息列表,并将结果赋值给`list`变量。
list = selectUserWantByUid ( uid ) ;
list = selectUserWantByUid ( uid ) ;
// 创建一个`UserWantBean`类型的列表`userWantBeans`,用于存储经过格式转换等处理后的求购信息列表,初始化为空列表,后续会将处理后的求购信息逐个添加到这个列表中。
List < UserWantBean > userWantBeans = new ArrayList < > ( ) ;
List < UserWantBean > userWantBeans = new ArrayList < > ( ) ;
// 遍历查询到的`UserWant`类型的求购信息列表`list`,对于每个`UserWant`对象进行以下处理。
for ( UserWant userWant : list ) {
for ( UserWant userWant : list ) {
// 创建一个`UserWantBean`对象,这个对象从命名推测可能是用于展示给视图层的求购信息的数据模型类,可能和`UserWant`对象有一定的关联,但格式更适合视图层展示等用途。
UserWantBean userWantBean = new UserWantBean ( ) ;
UserWantBean userWantBean = new UserWantBean ( ) ;
// 设置`UserWantBean`对象的`id`属性,将当前遍历到的`UserWant`对象的`id`属性值赋给它, 用于存储求购信息的唯一标识ID。
userWantBean . setId ( userWant . getId ( ) ) ;
userWantBean . setId ( userWant . getId ( ) ) ;
// 设置`UserWantBean`对象的`modified`属性,将当前遍历到的`UserWant`对象的`modified`属性值赋给它,用于存储求购信息的修改时间等相关信息。
userWantBean . setModified ( userWant . getModified ( ) ) ;
userWantBean . setModified ( userWant . getModified ( ) ) ;
// 设置`UserWantBean`对象的`name`属性,将当前遍历到的`UserWant`对象的`name`属性值赋给它,用于存储求购信息的名称相关信息。
userWantBean . setName ( userWant . getName ( ) ) ;
userWantBean . setName ( userWant . getName ( ) ) ;
// 设置`UserWantBean`对象的`price`属性,通过调用当前遍历到的`UserWant`对象的`price`属性的`doubleValue`方法(因为`UserWant`对象中的`price`可能是`BigDecimal`类型,这里转换为`double`类型,方便在视图层展示或者后续可能的计算等操作),
// 将转换后的价格值赋给`UserWantBean`对象的`price`属性,用于存储求购信息的价格相关信息。
userWantBean . setPrice ( userWant . getPrice ( ) . doubleValue ( ) ) ;
userWantBean . setPrice ( userWant . getPrice ( ) . doubleValue ( ) ) ;
// 设置`UserWantBean`对象的`uid`属性,将前面获取到的`uid`( 当前用户的唯一ID) 赋给它, 用于标识该求购信息所属的用户。
userWantBean . setUid ( uid ) ;
userWantBean . setUid ( uid ) ;
// 设置`UserWantBean`对象的`quantity`属性,将当前遍历到的`UserWant`对象的`quantity`属性值赋给它,用于存储求购信息的数量相关信息。
userWantBean . setQuantity ( userWant . getQuantity ( ) ) ;
userWantBean . setQuantity ( userWant . getQuantity ( ) ) ;
// 设置`UserWantBean`对象的`remark`属性,将当前遍历到的`UserWant`对象的`remark`属性值赋给它,用于存储求购信息的备注相关信息。
userWantBean . setRemark ( userWant . getRemark ( ) ) ;
userWantBean . setRemark ( userWant . getRemark ( ) ) ;
// 设置`UserWantBean`对象的`sort`属性,通过调用`getSort`方法(这里推测是一个用于处理排序相关逻辑的方法,比如将数据库中存储的排序字段值转换为视图层合适的展示形式等),
// 将`UserWant`对象的`sort`属性作为参数传入,获取处理后的排序信息并赋给`UserWantBean`对象的`sort`属性,用于存储求购信息的排序相关信息。
userWantBean . setSort ( getSort ( userWant . getSort ( ) ) ) ;
userWantBean . setSort ( getSort ( userWant . getSort ( ) ) ) ;
// 将处理好的`UserWantBean`对象添加到`userWantBeans`列表中,这样就完成了对一个求购信息的格式转换和添加操作,循环结束后`userWantBeans`列表就包含了所有经过处理的求购信息。
userWantBeans . add ( userWantBean ) ;
userWantBeans . add ( userWantBean ) ;
}
}
// 将处理好的求购信息列表`userWantBeans`添加到`model`对象中( 在Spring MVC等框架中, `model`通常用于向视图层传递数据,这里添加后在视图层就可以获取并展示这些求购信息了),属性名为`userWant`,视图层可以通过这个属性名获取对应的求购信息列表进行展示。
model . addAttribute ( "userWant" , userWantBeans ) ;
model . addAttribute ( "userWant" , userWantBeans ) ;
} catch ( Exception e ) {
} catch ( Exception e ) {
// 如果在查询、处理求购信息过程中出现异常(比如数据库查询失败、数据转换出错等异常情况),打印异常堆栈信息(方便调试查看具体出错原因),
// 然后重定向到`/`根页面,这里可能是一种简单的错误处理方式,让用户回到首页等相对稳定的页面,避免出现错误页面无法操作的情况。
e . printStackTrace ( ) ;
e . printStackTrace ( ) ;
return "redirect:/" ;
return "redirect:/" ;
}
}
// 将用户信息`userInformation`添加到`model`对象中,同样方便视图层获取并展示用户相关的详细信息,比如用户名、头像等信息(具体取决于`UserInformation`对象中存储的内容)。
model . addAttribute ( "userInformation" , userInformation ) ;
model . addAttribute ( "userInformation" , userInformation ) ;
// 返回视图名称`"page/personal/my_require_product_page"`, 在Spring MVC等框架中, 会根据这个视图名称去查找对应的视图文件( 比如JSP、Thymeleaf等模板文件) 进行渲染展示, 这里就是将处理好的用户求购信息和用户信息传递给对应的视图进行展示操作。
return "page/personal/my_require_product_page" ;
return "page/personal/my_require_product_page" ;
}
}
//getUserWantCounts.do,查看求购总数
// `getUserWantCounts.do`方法,通过`@RequestMapping`注解配置了可以处理的请求路径为`/getUserWantCounts.do`,
// 并且通过`@ResponseBody`注解表示该方法返回的结果会直接作为响应体返回( 比如返回JSON格式的数据等, 常用于给前端提供数据接口, 不需要经过视图层渲染等操作) ,
// 作用应该是查看求购总数,从方法接收的参数以及内部逻辑来看,会先判断用户是否登录,然后查询该用户的求购总数并返回给前端。
@RequestMapping ( value = "/getUserWantCounts.do" )
@RequestMapping ( value = "/getUserWantCounts.do" )
@ResponseBody
@ResponseBody
public Map getUserWantCounts ( HttpServletRequest request , Model model ) {
public Map getUserWantCounts ( HttpServletRequest request , Model model ) {
// 创建一个`Map`类型的对象`map`,用于存储要返回的数据,这里主要是存储求购总数相关的信息,初始化为空的`HashMap`,后续会根据查询结果添加数据到这个`map`中。
Map < String , Integer > map = new HashMap < > ( ) ;
Map < String , Integer > map = new HashMap < > ( ) ;
// 判断请求会话中的`userInformation`属性值是否为空(通过`StringUtils.getInstance().isNullOrEmpty`方法判断,和前面判断用户信息是否为空的逻辑类似,用于确定用户是否登录或者有有效的用户信息),
// 如果为空,说明用户可能未登录等情况,此时将`"counts"`作为键,`-1`作为值添加到`map`中(通过`map.put("counts", -1)`操作),表示没有获取到有效的求购总数信息(用`-1`可能是一种约定的表示错误或者无数据的方式),然后直接返回`map`对象,将这个包含错误信息的`map`作为响应体返回给前端。
if ( StringUtils . getInstance ( ) . isNullOrEmpty ( request . getSession ( ) . getAttribute ( "userInformation" ) ) ) {
if ( StringUtils . getInstance ( ) . isNullOrEmpty ( request . getSession ( ) . getAttribute ( "userInformation" ) ) ) {
map . put ( "counts" , - 1 ) ;
map . put ( "counts" , - 1 ) ;
return map ;
return map ;
}
}
try {
try {
// 调用`getUserWantCounts`方法( 这里推测是一个数据访问层或者业务逻辑层的方法, 用于根据用户ID查询该用户的求购总数) , 传入从请求会话中获取到的`uid`( 用户唯一ID) 作为参数, 查询该用户的求购总数,
// 并将查询到的求购总数赋值给`counts`变量,然后将`"counts"`作为键,查询到的`counts`值作为值添加到`map`中(通过`map.put("counts", counts)`操作),用于准备返回给前端的数据。
int counts = getUserWantCounts ( ( Integer ) request . getSession ( ) . getAttribute ( "uid" ) ) ;
int counts = getUserWantCounts ( ( Integer ) request . getSession ( ) . getAttribute ( "uid" ) ) ;
map . put ( "counts" , counts ) ;
map . put ( "counts" , counts ) ;
} catch ( Exception e ) {
} catch ( Exception e ) {
// 如果在查询求购总数过程中出现异常(比如数据库查询失败等异常情况),打印异常堆栈信息(方便调试查看具体出错原因),
// 然后将`"counts"`作为键,`-1`作为值添加到`map`中(通过`map.put("counts", -1)`操作),同样表示出现错误没有获取到有效的求购总数信息,最后返回`map`对象,将包含错误信息的`map`作为响应体返回给前端。
e . printStackTrace ( ) ;
e . printStackTrace ( ) ;
map . put ( "counts" , - 1 ) ;
map . put ( "counts" , - 1 ) ;
}
}
// 返回`map`对象,将存储着求购总数信息(正常情况下是实际查询到的总数,出现异常则是`-1`表示错误)的`map`作为响应体返回给前端,前端可以根据接收到的数据进行相应的展示或者处理。
return map ;
return map ;
}
}