#json #angular #angular-httpclient #http-delete
#json #угловой #angular-httpclient #http-delete
Вопрос:
Я пытаюсь удалить простой объект student по его идентификатору. Это работает нормально. но вместо того, чтобы показывать сообщение об успешном завершении, оно возвращает сообщение об успешном завершении в виде сообщения об ошибке.
код серверной части в java ->
код контроллера:
@DeleteMapping("/student/{$id}")
public String deleteStudent(@PathVariable int $id){
return student_service.deleteStudent($id);
}
код службы:
public String deleteStudent(int $id){
student_repository.deleteById($id);
return "student deleted, id: " $id;
}
исходный код в angular ->
код службы:
public deleteStudentById($id: number): Observable<string>{
return this.http.delete<string>(this.url `student/${$id}`);
}
код основного класса:
deleteStudentById($id: number): void{
this.httpService.deleteStudentById($id)
.subscribe(
(res => console.log(res)),
(error => console.log(error))
);
}
Ошибка в консоли:
HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://localhost:8080/student/3", ok: false, …}
SyntaxError: Unexpected token s in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttpRequest.onLoad (http://localhost:4200/vendor.js:124662:51) at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:495:35) at Object.onInvokeTask (http://localhost:4200/vendor.js:82248:33) at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:494:40) at Zone.runTask (http://localhost:4200/polyfills.js:263:51) at ZoneTask.invokeTask [as invoke] (http://localhost:4200/polyfills.js:576:38) at invokeTask (http://localhost:4200/polyfills.js:1717:18) at XMLHttpRequest.globalZoneAwareCallback (http://localhost:4200/polyfills.js:1754:25)
message: "Unexpected token s in JSON at position 0"
stack: "SyntaxError: Unexpected token s in JSON at position 0↵ at JSON.parse (<anonymous>)↵ at XMLHttpRequest.onLoad (http://localhost:4200/vendor.js:124662:51)↵ at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:495:35)↵ at Object.onInvokeTask (http://localhost:4200/vendor.js:82248:33)↵ at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:494:40)↵ at Zone.runTask (http://localhost:4200/polyfills.js:263:51)↵ at ZoneTask.invokeTask [as invoke] (http://localhost:4200/polyfills.js:576:38)↵ at invokeTask (http://localhost:4200/polyfills.js:1717:18)↵ at XMLHttpRequest.globalZoneAwareCallback (http://localhost:4200/polyfills.js:1754:25)"
__proto__: Error
constructor: ƒ SyntaxError()
message: ""
name: "SyntaxError"
__proto__: Object
text: "student deleted, id: 3"
__proto__: Object
headers: HttpHeaders
lazyInit: () => {…}
lazyUpdate: null
normalizedNames: Map(0) {}
__proto__: Object
message: "Http failure during parsing for http://localhost:8080/student/3"
name: "HttpErrorResponse"
ok: false
status: 200
statusText: "OK"
url: "http://localhost:8080/student/3"
__proto__: HttpResponseBase
[1]
Текстовое сообщение — это именно то, что я хочу вернуть как успешное сообщение.Но это показывает это как ошибку.
Извините, я забыл раздел объявления. Здесь http — это тип HttpClient.
private http: HttpClient;
private url: string = 'localhost:8080';
private httpService: StudentService;
Скриншот консоли здесь [1]: https://i.stack.imgur.com/dW1Ql.png
Комментарии:
1. Вызов вашего серверной части с помощью cURL (а не Angular) работает? Как выглядит остальная часть службы внешнего интерфейса (например, как
http
инициализируется)? Подробнее, это не минимально воспроизводимый пример!2. частный http: HttpClient; n частный url: string = ‘ localhost:8080 ‘; n частный HTTPService: StudentService; n Извините, я забыл раздел объявления. Здесь http — это тип HttpClient.
Ответ №1:
Угловой HTTP-клиент ожидает объект JSON в качестве содержимого ответа. Однако ваша конечная точка предоставляет обычный текст. Пожалуйста, используйте соответствующий тип ответа.
return this.http.delete<string>(this.url `student/${$id}`, { responseType: 'text' });
Комментарии:
1. TS2322: тип ‘Observable<ArrayBuffer>’ не может быть присвоен типу ‘Observable<string>’. Тип ‘ArrayBuffer’ не может быть присвоен типу ‘string’. IDE не позволяет мне этого делать!!!