Не удается вставить записи через Http.post запрос в угловой

#angular #http-post #spring-batch

#угловой #http-сообщение #пружинная партия

Вопрос:

Я пытаюсь понять, как вызвать метод Http.post в Angular. Я пытаюсь создать форму с определенными полями ввода. Как только пользователь нажмет кнопку «Отправить» в пользовательском интерфейсе, он вызовет службы ( написанные в springboot) для вставки записей в базу данных. Хотя мои службы springboot работают нормально, но я не могу правильно вызвать их из Angular.

услуги.ts:

 export class MFinService {   constructor(private http: HttpClient ) { }   public addRecord(networth : any){  return this.http.postlt;anygt;("http://localhost:8080/networth" , networth);   } }  

компонент.ts :

 export class NetworthHomeComponent implements OnInit {     constructor(private mFinService : MFinService) { }   ngOnInit(): void {  }   // Reactive cardForm  cardForm = new FormGroup({  account : new FormControl(),  ppf : new FormControl(),  nps : new FormControl(),  pf : new FormControl(),  stocks : new FormControl(),  mf : new FormControl(),  online : new FormControl()  });   public submitForm(){  console.log(this.cardForm.value);   this.mFinService.addRecord(this.cardForm.value).subscribe(  (data : any) =gt; {  console.log(data);  }  )  }  }  

Класс контроллера Springboot :

 @PostMapping("/networth")  public ResponseEntitylt;Stringgt; addNetworth(@RequestBody Networth networth){  int result = mFServices.addNetDetails(networth);  if(result gt; 0){  return ResponseEntity.status(HttpStatus.OK).body("A new records has been inserted !");  }   return null;  }  

Класс DTO для пружинных ботинок :

введите описание изображения здесь

Ошибка :

введите описание изображения здесь

вставленные записи в базу данных :

введите описание изображения здесь

Запрос и ответ на вкладке Сеть :

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. имя отправляемого объекта в базе данных, похоже, не совпадает, у них обоих одинаковое имя @RequestBody Networth networth ? например, учетная запись в angular против учетной записи в базе данных

2. Статус 200 ОК, так что ошибка, вероятно, связана с ответом, который не может быть проанализирован в JSON. Проверьте вкладку сеть и посмотрите, каков на самом деле ответ.

3. Добавлены скриншоты для того же. Происходит ли это потому, что ответ находится в строковом формате, в то время как Angular ожидает в формате json ?

Ответ №1:

Возможно, ошибка не в http-вызове, а в самой форме.

Попробуйте эти 2 вещи:

ВАЖНО: Объявите/инициализируйте каждое поле с соответствующим типом, чтобы оно соответствовало ожидаемому входному DTO для обратной стороны (чтобы соответствовать атрибутам вашего обратного интерфейса «Networth»).

  1. Инициализировать форму:
 cardForm = new FormGroup({  account : new FormControl(''),  ppf : new FormControl(''),  nps : new FormControl(''),  pf : new FormControl(''),  stocks : new FormControl(''),  mf : new FormControl(''),  online : new FormControl('')  });  

Если это все еще не работает, попробуйте это:

  1. Сделайте себе форму «макета», что-то вроде:
 // Use the same types that you have indicated on the back!!! interface CardForm {  account : string;  ppf : string;  nps : string;  pf : string;  stocks: string;  mf: string;  online: string; };  constructor(private mFinService : MFinService) { }   ngOnInit(): void {  }  cardForm: CardForm = {  account : '';  ppf : '';  nps : '';  pf : '';  stocks : '';  mf: '';  online: ''; };   public submitForm(){   this.mFinService.addRecord(cardForm).subscribe(  (data : any) =gt; {  console.log(data);  }  )  }  }  

Если этот последний способ сработает, то вы будете знать, что проблема заключалась не в вашем вызове api.

Ответ №2:

Сообщенная проблема возникла из-за того, что моя служба загрузки spring была ответом в строковом формате. Я изменил ответ, чтобы сделать его в формате JSON :

 @PostMapping("/networth")  public ResponseEntitylt;Stringgt; addNetworth(@RequestBody Networth networth){  int result = mFServices.addNetDetails(networth);  if(result gt; 0){  return ResponseEntity.status(HttpStatus.OK).body("{"response" : "a new record has been inserted successfully !"}");  }   return null;  }