Angular对接Spring Get、Put、Post、Delete请求

前言

随着教程的进行,除了感受一些单元测试和涉及到一些验证方面的代码有点难搞,发现其余的功能代码都仍是挺好弄明白的,以前教程上的文件都不是道去哪找,如今看见代码就知道它大概在哪一个文件,相信再过不久,单元测试也能像以前的代码那样信手拈来。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});  
}

结论

实现访问的方法真的挺灵活的,就像上一次博客写的新增成功后跳转到首页的方法,能够直接定义路由跳转,也能够写一个隐藏按钮,模拟点击跳转,真的挺灵活的,本身的思惟仍是须要提高。

完结

上周的浏览器大小写区分问题总算获得了解决,原本想搜英文,奈何本身的英语都还给了高中老师,找来找去在知乎上找到了一篇像样的文章,也算找到了合理的解释吧

  • 协议:最多见的就是HTTP跟HTTPS,除了这个还有FTP文件传输协议等,这里是不区分大小写的
  • 域名:域名(Domain Name)是须要经过域名系统(DNS)成功解析才可以正常访问到对应的IP地址,域名的命名规则之一就是:在域名中不区分大小写
  • 路径:路径部分是否区分大小写,则要看该网址对应的后台是如何实现的

你在乎过天天输入的网址是否区分大小写么? 张业生

相关文章
相关标签/搜索