Angular HttpClient POST 请求不与 Spring 控制器交互

Angular HttpClient POST request not interacting with Spring Controller

我无法从 Angular 前端服务 class 向我的 spring 后端控制器发出 POST 请求。

我正在尝试从控制器获取要显示的 log.info 消息,但它无法正常工作,除非我手动使用 Swagger 进行调用。

我认为问题不在于 Java Rest Controller,因为 Swagger 可以调用它。

我认为我的服务 class post 请求没有被调用有问题,因为我能够显示 console.log 消息。

我认为我的服务 class 中的 resourceUrl 没有问题,因为它与其他 REST 调用一起工作正常。

我认为这与我格式化 post请求的方式有关。

(打字稿服务 class)

import { Injectable } from '@angular/core';
import { HttpClient, HttpResponse, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { SERVER_API_URL } from 'app/app.constants';
import { DataModel} from 'app/shared/model/data-model.model';

@Injectable({ providedIn: 'root' })
export class DataModelService {
  public resourceUrl = SERVER_API_URL + 'services/api/data-model';

  constructor(protected http: HttpClient) {}

  postRequest(dataModel: DataModel, status: string): Observable<DataModel> {
    console.log('post rest service called with status ' + status);
    return this.http.post<DataModel>(`${this.resourceUrl}/${status}`, dataModel);
  }

(Typescript 组件 class)

export class Component implements OnInit, OnDestroy {
...

  constructor( protected dataModelService DataModelService) { }

  userClicks(dataModel: DataModel): void {
    /* eslint-disable no-console */
    console.log('button clicked');
    console.log(dataModel);
    /* eslint-enable no-console */

    this.dataModelService.postRequest(dataModel, 'Status changed');
  }

(Java Spring REST 控制器)

@RestController
@RequestMapping("/api")
public class RestResource {

    @PostMapping("/data-model/{status}")
    public ResponseEntity<DataModelDTO> create(@Valid @RequestBody DataModelDTO dataModelDTO, @PathVariable String status) throws URISyntaxException{
        log.info(dataModelDTO.toString() + " status " + status);
        return ResponseEntity.ok().body(dataModelDTO);    
    }
}

您需要subscribeObservable,否则请求不会被触发。 Observable 是“懒惰的”。

this.dataModelService.postRequest(dataModel, 'Status changed')
  .subscribe(response => {
    // Do something with the response optionally
  }, error => {
    // Do something if an error occurs
  });