Я столкнулся с неверным запросом.
Ошибка на стороне сервера:
Required request body is missing error
Ошибка на стороне клиента:
HttpErrorResponse {headers: HttpHeaders, status: 400, statusText: "Bad Request",
url: "http://localhost:9000/api/create-risk", ok: false, …}
Я протестировал API со своим встроенным компонентом swagger и получил ответ 201 с созданным надлежащим объектом и ожидаемым ответом. У меня есть ощущение, что это где-то с моей стороны недосмотр, но я уже часами смотрю на этот код и, похоже, не могу найти отключение. Любая помощь будет принята с благодарностью.
API:
@PostMapping(value = "/create-risk", produces =
MediaType.APPLICATION_JSON_VALUE)
public Risk createRisk(
@RequestBody Risk risk
) {
log.debug("REST request to save Risk : {}", risk);
Risk createdRisk = new Risk();
createdRisk.setPocFirstName(risk.getPocFirstName());
riskManagementRepository.save(createdRisk);
return createdRisk;
}
Angular RiskModel
export interface IRiskModel {
id?: any;
login?: string;
firstName?: string;
lastName?: string;
email?: string;
activated?: boolean;
langKey?: string;
authorities?: any[];
createdBy?: string;
createdDate?: Date;
lastModifiedBy?: string;
lastModifiedDate?: Date;
password?: string;
}
export class RiskModel implements IRiskModel {
constructor(
public id?: any,
public firstName?: string,
) {
this.id = id ? id : null;
this.firstName = firstName ? firstName : null;
}
}
Компонент риска HTML
<div class = "jumbotron">
<div class = "container">
<div class = "row">
<div class = "col-md-6 offset-md-3">
<form name = "form">
<div class = "form-group">
<input type = "text" [(ngModel)] = "risk.firstName" placeholder = "First Name" name = "firstName" class = "form-control" id = "firstName">
</div>
<div>
<button (click) = "saveRisk()" class = "btn btn-success">Save</button>
</div>
</form>
</div>
</div>
</div>
Create-Risk TS
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import {RiskModel,RiskManagementService} from 'app/core';
@Component({
selector: 'jhi-create-risk',
templateUrl: './create_risk.component.html',
styleUrls: ['create_risk.scss']
})
export class CreateRiskComponent implements OnInit {
risk: RiskModel;
inProduction: boolean;
swaggerEnabled: boolean;
constructor(
private riskManagementService: RiskManagementService,
private route: ActivatedRoute) {}
ngOnInit() {
this.route.data.subscribe(({ risk }) => {
this.risk = risk.body ? risk.body : risk});
};
saveRisk() {
this.riskManagementService.createRisk(this.risk).subscribe(response
=> response);
}
}
Служба рисков ТС
import { Injectable } from '@angular/core';
import { HttpClient, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { SERVER_API_URL } from 'app/app.constants';
import {IRiskModel} from 'src/main/webapp/app/core';
@Injectable({ providedIn: 'root' })
export class RiskManagementService {
public resourceUrl = SERVER_API_URL + 'api/create-risk';
constructor(private http: HttpClient) {}
createRisk(risk: IRiskModel): Observable<HttpResponse<IRiskModel>> {
return this.http.post<IRiskModel>(this.resourceUrl, risk, {observe:
'response'});
}
}
Я удалил экземпляр newRisk и вместо этого вызвал get / set для объекта Risk @ResponseBody и вернул его ... все та же ошибка Bad Request и 400 на стороне сервера / клиента.
плохой запрос означает, что модель пользовательского интерфейса не один к одному с бэкэндом, поля не отображаются должным образом или проверки на бэкэнде не выполняются



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


в контроллере Java вы создаете новый риск, устанавливаете атрибут, а затем сохраняете его. Почему бы вам не сохранить тот, который вы получили от оставшегося звонка?