spring-dao.xml这里面应该写错了,贴下代码
countDown()函数中嵌套了handleSeckill()函数,而handleSeckill()函数中又嵌套了ountDown()函数,可能进入死循环
应该是你的电话号码写入cookie那没写对
我也是这个问题,问一些最后怎么解决的
查看下你的cookie,前后端是否一致
请问楼主这个问题你最后怎么解决 的呢?
不用再判断时间的话,那个区seckill对象,就没必要了吧(那缓存更没有必要了)
解决了,,少些一个双引号
好吧,又解决了,这里掉了一个反括号,眼神不好
你需要把你的检测手机号码的那段代码检查一下
是不是Controller里的execute方法少了@Responsebody
我也遇到这个问题了,还没有找到怎么解决
87行就抄错了
一样遇到过。
success为false应该是自己给的吧,不是说获取数据失败返回false,后面老师不是有改false为true吗
try {
SeckillExecution execution =seckillService.excuteSeckill(seckillId, phone, md5);
return new SeckillResult<SeckillExecution>(true, execution);
} catch (RepeatKillException e) {
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.REPEAT_KILL);
return new SeckillResult<SeckillExecution>(true, execution);
} catch (SeckillCloseException e) {
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.END);
return new SeckillResult<SeckillExecution>(true, execution);
} catch (Exception e) {
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.INNER_ERROR);
return new SeckillResult<SeckillExecution>(true, execution);
}
在controller代码的method改成
method = {RequestMethod.POST,RequestMethod.GET},
检查一下事务有没有配好,看看有没有加注解,细心检查
可能是前端的问题 我也遇到了 后台接口自测没问题
更正一下,是405,get请求不支持错误
修改一下,SeckillController 类中的 加粗的位置即可
@ResponseBody
@RequestMapping(value = "/{seckillId}/{md5}/execution", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public SeckillResult<SeckillExecution> execute(@PathVariable("seckillId") Long seckillId,
@PathVariable("md5") String md5,
@CookieValue(value = "killPhone", required = false) Long phone) {
if (phone == null){
return new SeckillResult<SeckillExecution>(false,"未注册登录的用户");
}
try {
SeckillExecution seckillExecution = seckillService.executeSeckill(seckillId, phone, md5);
return new SeckillResult<SeckillExecution>(true,seckillExecution);
}catch (RepeatKillException e){
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.REPEAT_KILL);
return new SeckillResult<SeckillExecution>(true,execution);
}catch (SeckillCloseException e){
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.END);
return new SeckillResult<SeckillExecution>(true,execution);
}catch (Exception e){
logger.error(e.getMessage(),e);
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.INNER_ERROR);
return new SeckillResult<SeckillExecution>(true,execution);
}
}
上次容器未正常关闭,或者本级已经正在运行服务端口被占用
url 不正确,你Controller写的是excution,js 上写的是execution,多了个e
给大家一个详细的步骤。。
修改了数据库里seckill表的start_time的属性就好了,
把DEFAULT CURRENT_TIMESTAMP ON UPDATE,改为 DEFAULT '0000-00-00 00:00:00'
不知道为什么当时sql创建完后start_time的属性是 CURRENT_TIMESTAMP ON UPDATE。。。
老师当时:
修改后:
原因:
timestamp如果设置成CURRENT_TIMESTAMP ,当执行insert操作的时候,会插入当前系统时间。
如果是ON UPDATE CURRENT_TIMESTAMP,当执行update操作的时候,会跟着更新为当前UPDATE操作时的时间。
我们项目里在执行减库存的时候,执行的是update语句:
update
seckill
set
number = number -1
where seckill_id=#{seckillId}
and start_time <![CDATA[ <= ]]> #{killTime}
and end_time>=#{killTime}
and number>0;
所以会随着这个秒杀减库存的操作改变start_time的值。
$.get('/seckill/time/now',{},function(result)
==》$.get('/seckill-alpha/seckill/time/now',{},function(result);
把项目名加上去试试..
在seckill.js里按住ctrl点击post,没法跳转到该方法,但是get就没有问题。在jquery.min.js中也找不到这个方法。见了鬼了
解决了 是我把$.post()里面函数对应的参数(result)搞混了
produces = {"application/json;charset=UTF-8"})
这句话应该写错了
我知道了,是数据库seckill表把startTime的default设置为了current_time,改为null即可