Проблема: отправка объекта в почтовом запросе из angular в springboot

#angular #typescript #spring-boot #post #http-status-code-404

Вопрос:

У меня проблема, когда я пытаюсь отправить объект из формы в angular в springboot и базу данных MySQL. Я обнаружил ошибку 404, не найденную. Мой код приведен ниже. Вот код угловой службы:

 import { DonatorDTO } from '../models/donatorDTO'; import { HttpHeaders, HttpClient } from "@angular/common/http"; import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs';  @Injectable({  providedIn: 'root' }) export class DonatorsService {  private watKrewDonationUrl = "http://localhost:8080/donators";   constructor(private _http: HttpClient){}   public addDonator(donatorDTO: DonatorDTO): Observablelt;DonatorDTOgt;{  return this._http.postlt;DonatorDTOgt;(this.watKrewDonationUrl, donatorDTO);  } }  

Вот код углового компонента:

 import { DonatorDTO } from './../../models/donatorDTO';  import { DonatorsService } from './../../services/donators.service'; import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, NgForm, Validators } from '@angular/forms';  @Component({  selector: 'app-donators',  templateUrl: './donators.component.html',  styleUrls: ['./donators.component.css'] }) export class DonatorsComponent implements OnInit {   donatorForm: NgForm;   constructor(private donatorService: DonatorsService) {}  ngOnInit(): void {   }   donatorDTO: DonatorDTO = new DonatorDTO();  companies: string [] =['1. kompania','2. kompania','3. kompania','4. kompania','5. kompania','6. kompania','7. kompania','8. kompania',  '9. kompania','10. kompania','11. kompania','12. kompania','13. kompania','14. kompania','15. kompania','16. kompania',  '17. kompania','18. kompania','19. kompania','20. kompania','21. kompania'];  bloodGroups: string [] = ['A ', 'A-', 'B ', 'B-', 'AB ', 'AB-', '0 ', '0-'];  ranks: string [] = ['szer. pchor.', 'st. szer. pchor.', 'kpr. pchor.', 'st. kpr. pchor.', 'plut. pchor.', 'sierż. pchor.'];   createDonator() {  console.log(this.donatorDTO);  this.donatorService.addDonator(this.donatorDTO).subscribe(data =gt; {  console.log(data)  })  }   }  

Вот .html-код

 lt;!DOCTYPE htmlgt; lt;html lang="pl-PL"gt; lt;bodygt;  lt;div class="container"gt;  lt;div class="col-md-6"gt;  lt;form #donatorForm="ngForm" (ngSubmit) = "createDonator()" gt;  lt;div class="form-group"gt;  lt;input type="text" class = "form-control" [(ngModel)]="donatorDTO.name" name="name" placeholder="np. Jan" gt;  lt;small id="nameHelp" class="form-text text-muted"gt;Podaj imię dawcylt;/smallgt;  lt;/divgt;  lt;div class="form-group"gt;  lt;input type="text" class = "form-control" [(ngModel)]="donatorDTO.surname" name="surname" placeholder="np. Kowalski" gt;  lt;small id="surnameHelp" class="form-text text-muted"gt;Podaj nazwisko dawcylt;/smallgt;  lt;/divgt;  lt;div class="form-group"gt;  lt;input type="email" class = "form-control" [(ngModel)]="donatorDTO.email" name="email" placeholder="np. jan.kowalski@wp.pl" gt;  lt;small id="emailHelp" class="form-text text-muted"gt;Podaj email na którego dawca będzie otrzymywał wiadomości związane z HDKlt;/smallgt;  lt;/divgt;  lt;div class="form-group"gt;  lt;select class="form-control" [(ngModel)]="donatorDTO.militaryRank" name="militaryRank"gt;  lt;option *ngFor="let rank of ranks" [ngValue]="rank"gt;{{rank}}lt;/optiongt;  lt;/selectgt;  lt;small id="rankHelp" class="form-text text-muted"gt;Podaj stopień wojskowylt;/smallgt;  lt;/divgt;  lt;div class="form-group"gt;  lt;select [(ngModel)]="donatorDTO.companyName" name="company" gt;  lt;option *ngFor="let cmp of companies" [ngValue]="cmp"gt;{{cmp}}lt;/optiongt;  lt;/selectgt;  lt;small id="companyHelp" class="form-text text-muted"gt;Wybierz pododdział dawcylt;/smallgt;  lt;/divgt;  lt;div class="form-group"gt;  lt;select [(ngModel)]="donatorDTO.bloodGroup" name="bloodGroup" gt;  lt;option *ngFor="let blood of bloodGroups" [ngValue]="blood"gt;{{blood}}lt;/optiongt;  lt;/selectgt;  lt;/divgt;  lt;div class="form-group"gt;  lt;button class = "btn btn-success" type="submit"gt;Dodaj dawcę do bazylt;/buttongt;  lt;/divgt;  lt;/formgt;    lt;/divgt;  lt;/divgt; lt;/bodygt; lt;/htmlgt;  

Here is model component:

 export class DonatorDTO {  name: string;  surname: string;  email: string;  militaryRank: string;  companyName: string;  bloodGroup: string; }  

And now springboot service code:

 public void addDonator(DonatorDTO donatorDTO) throws MailException {  if (donatorRepository.existsByEmail(donatorDTO.getEmail())) {  throw new RuntimeException("User with this e-mail already exists in db");  } else {  Donator donator = new Donator();  Company company = companyRepository.findByCompanyName(donatorDTO.getCompanyName()).orElseThrow(() -gt; new ResourceNotFoundException("Company not found"));  BloodGroup blood = bloodGroupRepository.findBloodGroupByBloodType(donatorDTO.getBloodGroup()).orElseThrow(() -gt; new ResourceNotFoundException("Blood group not found"));  donator.setName(firstLetterToUpperCase(donatorDTO.getName()));  donator.setSurname(firstLetterToUpperCase(donatorDTO.getSurname()));  donator.setEmail(donatorDTO.getEmail());  donator.setMilitaryRank(donatorDTO.getMilitaryRank());  donator.setCompany(company);  donator.setBloodGroup(blood);  blood.setNumberOfDonators(blood.getNumberOfDonators()   1);  donator.setNextDonationDate(LocalDate.now());  donator.setIsCapable(true);  donatorRepository.save(donator);  try {  mailService.helloNotification(donatorDTO);  } catch (MailException mailException) {  logger.error("Can't send email with confirmation of addition donator in a database");  logger.error(mailException.getMessage());  } catch (UnsupportedEncodingException e) {  e.printStackTrace();  } catch (MessagingException e) {  e.printStackTrace();  }  }  }  

Controller code:

 @RestController public class DonatorController {   private final DonatorService donatorService;  private final MailService mailService;   public DonatorController(DonatorService donatorService, MailService mailService) {  this.donatorService = donatorService;  this.mailService = mailService;  }   @PostMapping(value = "/donators")  public ResponseEntity addDonator(@RequestBody DonatorDTO donatorDTO) {  donatorService.addDonator(donatorDTO);  return new ResponseEntitylt;gt;(HttpStatus.OK);  } }  

А вот ДонаторДТО в спрингбут

 package com.example.watkrew.dto;  import com.example.watkrew.entity.BloodGroup; import com.example.watkrew.entity.Company; import com.example.watkrew.entity.Donator; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;  @Data @AllArgsConstructor @NoArgsConstructor public class DonatorDTO {  private String name;  private String surname;  private String email;  private String militaryRank;  private String companyName;  private String bloodGroup;   public DonatorDTO(String name, String surname, String email, String militaryRank, Company company, BloodGroup bloodGroup) {  this.name = name;  this.surname = surname;  this.email = email;  this.militaryRank = militaryRank;  this.companyName = company.getCompanyName();  this.bloodGroup = bloodGroup.getBloodType();  }  }  

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

1. Можете ли вы отладить код на стороне сервера? Вы действительно бросаете ResourceNotFoundException , если компания или группа крови не могут быть найдены в базе данных. В качестве альтернативы убедитесь, что ваш application.properties файл должен server.error.include-message=always отправлять сообщение об исключении на стороне клиента, возможно, таким образом вы сможете увидеть, что на самом деле не так.

2. К сожалению, после добавления вашего совета в application.properties нет дополнительного сообщения о том, что не так, и это все то же сообщение.