你们的项目是如何进行参数校验的
在项目中数据的正确性、完整性,不能仅仅依靠前端来校验数据,还需要对接口请求的参数进行后端的校验。在项目中我使用的是Spring Validation来进行校验的,这是一套基于注解的权限校验框架。
-
定义校验规则。在需要进行参数校验的实体类中,使用校验注解(如
@NotNull
、@Size
、@Pattern
等)来定义校验规则。public class User { @NotNull private String username; @Size(min=6, max=20) private String password; @Email private String email; // 其他属性和方法 }
-
其次在controller的方法中,使用
@Valid
注解对需要进行校验的实体类,开启校验参数。同时也可以法参数列表中添加BindingResult
参数,用于接收校验结果。import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController @Validated public class UserController { @PostMapping("/user") public String addUser(@Valid @RequestBody User user, BindingResult result) { if (result.hasErrors()) { // 处理校验失败的情况 return "参数校验失败:" + result.getAllErrors(); } else { // 校验通过,执行业务逻辑 return "用户注册成功"; } } }
-
配置校验器,在 Spring 的配置类中,需要配置校验器(Validator)的 Bean。可以使用 LocalValidatorFactoryBean 类来创建校验器,并将其注册为 Bean。
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @Configuration public class AppConfig { @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } }
详细说一下你们的问答系统用到了几张表,表中的主要字段有哪些,表关系是什么
我们项目中对问答系统共用到了2张表。分别是:
interaction_question
(互动提问的问题表)、interaction_reply
(互动问题的回答或评论表)。
interaction_question
表主要字段:
- id(主键,互动问题的id)
- course_id(所属课程id)
- chapter_id(所属课程章id)
- section_id(所属课程节id)
- user_id(提问学员id)
- latest_answer_id(最新的一个回答的id)
interaction_reply
表主要字段:
- id(互动问题的回答id)
- question_id(互动问题id)
- answer_id(回复的上级回答id)
- user_id(回答者id)
- target_user_id(回复的目标用户id)
- target_reply_id(回复的目标回复id)
两表之间的关系是:
在interaction_reply
表中question_id
是interaction_question
表的外键,通过question_id
可以查询到这个问题的所有互动。
而interaction_reply
表中answer_id
和 target_reply_id
是用做在同一个问题下中的评论的互动。
具体说就是当一个用户回答了这个问题,记录一条互动问题回答的记录,数据中有question_id
。
其他用户开始评论这个回答,记录的数据中有question_id
、answer_id
。
而其他用户对这条评论互动时,会记录一条包含question_id
、answer_id
、target_reply_id
的数据。
你们为什么用Mongo, 而不用MySQL存储问题和评论
本项目涉及到了评价功能,当随着评价的数量增加,这些信息也会不断的增加。
相对于用户而言对于这些信息通常是写多看少,且对于这些数据多一条或少一条,造成的影响不大。
综合考虑之后,认为这些数据是价值小的,数量大的、读写操作频繁、对事务要求不高的数据,此时存入mysql或者redis的时候就显得不合适。
而Mongo正好适合存储这些信息,所以就采用了Mongo数据库。
头铁的小伙伴,可以直接说老板要求的。
Mongo结构是什么
database
:和Mysql数据库一样,代表库。
collection
:相当于Mysql数据库的table
表。
document
:相当于Mysql数据库的row
(表用的一条数据)。
field
:相当于Mysql数据库的column
(表中的字段)。
index
:和Mysql数据库一样,代表索引。
primary key
:相当于注解id,区别是MongoDB自动将_id
字段设置为主键。
MongoDB不支持表连接
蒙多!想去那就去那!