我是学生,打开了之前测试用的项目
发现根本没有运行前台代码,而是直接报错
前台代码如下:
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/user/addUser" method="post">
<input type="text" name="username"/>
<input type="text" name="userage"/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
然后因为没有运行前台代码,导致直接一个空值要付于数据库,又因为数据库userid不能为空,所以报错
Controller层代码如下:
@Controller
@RequestMapping("/user")
public class UsersController {
@Autowired
private UsersService usersService;
@RequestMapping("/addUser")
public String addUser(Users users){
this.usersService.addUser(users);
return "redirect:/ok";
}
我曾经试着把userid设置为允许空值,结果发现他会直接跳到“OK”界面,应该是直接运行了addUser这个方法,怎么样可以先运行前台,让我提交数据再运行这个方法呢?
你要明确userid是想在后台生成还是通过用户来控制。
其实逻辑是没问题的,只是userid这个字段值的问题。
一般userid在后台生成,根据个人定义的一套规则。
public String addUser(Users users){
users.setUserid(System.currentTimeMillis().intValue());
this.usersService.addUser(users);
return "redirect:/ok";
}
一般不需要设置userId允许空值,首先确保你的userID在数据库中是主键自增,其次,确保你的user类的构造方法有除了userId的构造方法,比如参数只有username和userage,此外@RequestMapping("/addUser")改成@RequestMapping(value="/addUser", method = RequestMethod.POST)或者@PostMapping("/addUser")
Controller层中,User user 参数前面加注解@RequestBoby,这样才能够使用post方法自动注入到user中
它的意思是你的userId不能为空值。
500一般是指服务器响应出错,具体可以参见https://baike.baidu.com/item/HTTP-500%E9%94%99%E8%AF%AF/4467831?fr=aladdin。根据您提供的信息中可见,楼上的回答是正确的,userId在插入时,如果是自增,插入null值,肯定会报错,因为用户的操作优先级要高于默认优先级,也就是说自增情况下,你是不需要给值的,当以“null”插入时,系统在比较优先级时,会把null设为当前记录的Id,但主键id是非空的,不能为NULL,因此会抛出MySQLIntegrityConstraintViolationException。另外根据我的个人经验,一般500是指前端请求无法找到路径会出现这个错误,逻辑上来讲,如果你的前端请求能够到达后端,而后端出现异常,出现404或405的概率会很大。所以你可以先从路径配置上进行排查。您最好是将后端的异常捕获信息贴上来,谢谢。MySQLIntergrityConstraintViolationException解释:MySQL是指数据库类型,Intergrity:完整的,Constraint:约束(主键约束),Violation:暴力。综合解释:违反了MySQL主键约束破坏了其完整性。