3-1 你们的项目是如何进行参数校验的
我在项目中是使用Validation技术进行参数校验的,这个技术是Java Bean Validation (JSR 380) 提供的,常用的注解有以下几种:
①@NotNull: 用于标记字段或方法参数不能为空。
②@Size: 用于标记字段或方法参数的大小,可以指定最小值和最大值。
③@Min: 用于标记字段或方法参数的最小值。
④@Max: 用于标记字段或方法参数的最大值。
⑤@Email: 用于标记字段或方法参数必须是一个有效的电子邮件地址。
⑥@Pattern: 用于标记字段或方法参数必须符合指定的正则表达式。
⑦@AssertTrue: 用于标记字段或方法参数必须为true。
⑧@AssertFalse: 用于标记字段或方法参数必须为false。
⑨@NotBlank: 用于标记字段或方法参数不能为空,并且去除首尾的空格后长度必须大于0。
⑩@NotEmpty: 用于标记字段或方法参数不能为空,可以是字符串、集合、Map或数组,但不能为null。
要使这些注解生效,需要使用一个支持Bean Validation的验证器。我使用的验证器是Spring框架中的验证支持,也就是在类上打上@Validated这个注解来开启验证功能,使用@Valid和@RequestBody注解来验证从请求体中传入的用户对象。
3-2 详细说一下你们的问答系统用到了几张表,表中的主要字段有哪些,表关系是什么
我在项目中的问答系统涉及到2个微服务,三张表,分别是用户微服务的用户表,学习微服务的问题表和回答表。
用户表中主要包含:用户id,用户名和用户图片等。
问题表主要包含:问题id,问题内容,问题描述,提问人的id,最后一个回复人的id,问题回答数量,以及一些业务相关的字段。
回答表主要包含:回答id,问题id,评论id,回答人的id,回答的内容,回复的目标用户id,回复的目标回复id,回答次数,以及一些业务相关的字段。
这三张表的关系为:一个用户可以提多个问题,也可以回答多个问题,和对一个问题回答多次,一个问题可以有多个回答,一个回答也可以有多个回答及评论。
3-3 你们为什么用Mongo, 而不用MySQL存储问题和评论
我在项目中之所以用Mongo存储问题和评论,是因为Mongo有以下几个特点。
Mongo可以存储海量数据;
Mongo存储的多为价值较低的数据;
问题和评论量比较多,且价值相对不高,完美契合Mongo,因此我在项目中使用Mongo存储问题和评论。