随着教程的进行,除了感受一些单元测试和涉及到一些验证方面的代码有点难搞,发现其余的功能代码都仍是挺好弄明白的,以前教程上的文件都不是道去哪找,如今看见代码就知道它大概在哪一个文件,相信再过不久,单元测试也能像以前的代码那样信手拈来。java
以前也算搞明白了先后台对接的方式,无非就是前台发送请求,后台接收请求,返回想要的值,固然前提是前台要订阅,不然不发送请求,下面以学生的新增方法为例
Student.service.tssql
public save(student: Student): Observable<Student> { const url = 'http://localhost:8080/Student'; return this.httpClient.post<Student>(url, student); }
student/add.component.ts浏览器
onSubmit(): void { console.log(this.formGroup.value); console.log(this.klass); this.student = this.formGroup.value; this.student.klass = this.klass; console.log(this.student); this.studentService.save(this.student).subscribe((student:Student) =>{ console.log(student); this.linkToIndex.nativeElement.click(); }) }
StudentController.javaapp
@PostMapping @ResponseStatus(HttpStatus.CREATED) public Student save(@RequestBody Student student){ return studentService.save(student); }
StudentServiceImpl.javaide
@Override public Student save(Student student) { this.studentRepository.save(student); return student; }
相对于新增数据使用的Post请求、更新数据使用的Put请求以及删除使用的Delete请求来讲,查询数据使用的Get方法使用的十分普遍,甚至在一个实体类内要使用屡次,为了区分,他们会加上一些参数,还多是一些路径,可是,咱们没有声明前台的请求就对应后台的某个方法,举个例子吧:post
@PostMapping("login") public boolean login(@RequestBody Teacher teacher){ return this.teacherService.login(teacher.getUsername(), teacher.getPassword()); }
昨天遇到这段代码确实迷茫了,像以前的代码,里面放的都是参数,就像下面这样,里面放置了“id”这个参数,可是上面的是啥,一开始也觉得是参数,可是仔细看了前台发现并无给它定义,这是凭空出现的一个“参数”,而后就蒙圈了,后来晚上请教了一下潘老师,发现这是个路径,也就是说前台必须访问“http://localhost:8080/Teacher/login”才能和后台完成数据的交互,而有“{}”的才是参数。单元测试
@DeleteMapping("{id}") public void delete(@PathVariable Long id) { String sql = String.format("delete from teacher where id = %s" ,id); this.jdbcTemplate.update(sql); }
那么问题来了,对于前面的add,edit以及delete方法来讲,我没有指定路由,可是它怎么实现对接的呢。测试
有疑惑只靠想只不能解决问题的,就算真的猜明白了,本身也会保留怀疑的态度,只有亲手实践了,才会信服
因为代码出现了一些问题,没有办法运行测试了,只能看代码去理解了:this
public onSubmit(): void { const url = 'http://localhost:8080/Teacher'; const teacher = { name: this.name, username: this.username, email: this.email, sex: this.sex }; console.log(teacher); this.httpClient.post(url,teacher) .subscribe(() =>{ console.log('添加成功'); this.appComponent.ngOnInit(); this.router.navigate(\['./../'\],{relativeTo:this.route}); },(response)=>{ this.showMessage('请求发生错误'); console.log('请求发生错误',response); }); }
以上对应的是教师的新增方法,有参数的直接传参数,没参数的就是原路径,之因此访问index、add、edit、delele才会实现对接,是由于前台的设置,当点击按钮时跳转到对应的路由时,才会执行对应的方法,而登陆则是直接访问url
login(username: string, password: string): Observable<boolean\>{ const url = 'http://localhost:8080/Teacher/login'; return this.httpClient.post<boolean\>(url,{username,password}); }
实现访问的方法真的挺灵活的,就像上一次博客写的新增成功后跳转到首页的方法,能够直接定义路由跳转,也能够写一个隐藏按钮,模拟点击跳转,真的挺灵活的,本身的思惟仍是须要提高。
上周的浏览器大小写区分问题总算获得了解决,原本想搜英文,奈何本身的英语都还给了高中老师,找来找去在知乎上找到了一篇像样的文章,也算找到了合理的解释吧