业务:第三天

你们的项目是如何进行参数校验的

在项目中数据的正确性、完整性,不能仅仅依靠前端来校验数据,还需要对接口请求的参数进行后端的校验。在项目中我使用的是Spring Validation来进行校验的,这是一套基于注解的权限校验框架。

  1. 定义校验规则。在需要进行参数校验的实体类中,使用校验注解(如 @NotNull@Size@Pattern 等)来定义校验规则。

     public class User {
        @NotNull
        private String username;
    
        @Size(min=6, max=20)
        private String password;
        
        @Email
        private String email;
        
        // 其他属性和方法
    }
    
  2. 其次在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 "用户注册成功";
            }
        }
    }
    
  3. 配置校验器,在 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_idinteraction_question表的外键,通过question_id可以查询到这个问题的所有互动。
interaction_reply表中answer_idtarget_reply_id是用做在同一个问题下中的评论的互动。

具体说就是当一个用户回答了这个问题,记录一条互动问题回答的记录,数据中有question_id
其他用户开始评论这个回答,记录的数据中有question_idanswer_id
而其他用户对这条评论互动时,会记录一条包含question_idanswer_idtarget_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不支持表连接

蒙多!想去那就去那!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抹灰丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值