maven创建web项目Controller层先启用导致传入数据为null

我是学生,打开了之前测试用的项目

img

发现根本没有运行前台代码,而是直接报错
前台代码如下:

<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主键约束破坏了其完整性。