3-1 你们的项目是如何进行参数校验的
我们在之前的项目中不光靠前端进行校验数据,在后端也使用了Spring中的Validation进行校验;
Validation是一套基于注解的权限校验框架
-
创建验证规则:
创建一个 Java 类来表示需要验证的数据对象,并在该类中使用注解来定义验证规则。例如,可以使用@NotNull
、@Size
、@Pattern
等注解来定义字段的验证规则。 -
执行验证:
在需要验证数据的地方,如控制器方法中,使用 Spring 提供的Validator
接口进行数据验证。可以使用Validator
接口的实现类如LocalValidatorFactoryBean
来执行验证。 -
处理验证结果:
在验证完成后,可以获取验证结果并根据需要进行处理。验证结果通常包含验证错误的详细信息,可以根据这些信息来进行相应的处理,比如返回错误信息给用户或者进行其他业务逻辑处理。
以下是一个简单的示例代码,演示了 Spring Validation 的基本使用方式:
@RestController
public class UserController {
@Autowired
private Validator validator;
@PostMapping("/users")
public ResponseEntity<String> createUser(@Valid @RequestBody User user) {
Set<ConstraintViolation<User>> violations = validator.validate(user);
if (!violations.isEmpty()) {
// 处理验证错误
// 返回错误信息给用户
return ResponseEntity.badRequest().body("Validation failed: " + violations.toString());
} else {
// 保存用户数据
// 返回成功信息
return ResponseEntity.ok("User created successfully");
}
}
}
在上面的示例中,@Valid
注解用于触发数据验证,validator.validate(user)
用于执行验证,然后根据验证结果进行相应的处理。
3-2 详细说一下你们的问答系统用到了几张表,表中的主要字段有哪些,表关系是什么
用到了三张表,分别是问题表,回答表,用户表
问题表中的主要字段包括:课程id,章id,节id,标题,描述,是否匿名,最新回答的id,回答数量,提交问题用户的id,问题是都被隐藏,问题状态;
回答表中的主要字段包括:回答内容,用户id,问题id,是否匿名,点赞数量,评论数量,回答id,目标用户id,目标评论id;
用户表中的主要字段包括:用户id,用户头像,用户昵称;
用户和问题表关系为一对多,问题表和回答表为一对多,用户表和回答表为一对多。
3-3 你们为什么用Mongo, 而不用MySQL存储问题和评论
1.MongoDB使用基于 JavaScript 的查询语言,可以执行复杂的查询和聚合操作。
2.MongoDB可以存储海量数据。
3.问题和评论通常价值不高,存到MySQl中比较浪费资源。
4.问题和评论可能具有不同的字段,使用 MongoDB 可以更灵活地存储这些数据。