【发布时间】:2023-03-08 09:10:01
【问题描述】:
我正在从前端 (Angular) 向后端 (Java) 发出 POST 请求。发布请求作为 JSON 对象(由多个数组组成)发送,在 Java 中,应该与数组打算作为列表的对象匹配。这是一个表示问题的示例代码,因为这不是实际代码,因为它属于工作并且不希望有任何机密性问题,所以这只是为了尽可能接近原始代码来表示问题(值得注意的是,有很多存储的学校,并且为了论证,他们可以由他们的学生和所教授的课程唯一标识,并使用此信息,我们希望获得该学校的教室):
Angular 服务 api 调用:
getSchool(students, lessons): Promise<School> {
return this.http.post('sampleurl/classroom', JSON.stringify({students:students, lessonsTaught:lessons}), {headers:this.headers})
.toPromise()
.then(res => <School>res.json())
.catch(this.handleError);
}
Angular School 模型:
export class School {
public students:any;
public lessonsTaught:string[];
public classrooms:string[];
constructor() {}
}
Java 学校对象:
public class School {
private List<Student> students;
private List<String> lessonsTaught;
private List<String> classrooms;
public School() {}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
students = this.students;
}
public List<Stream> getLessonsTaught() {
return students;
}
public void setLessonsTaught(List<String> lessonsTaught) {
lessonsTaught = this.lessonsTaught;
}
public List<String> getClassrooms() {
return classrooms;
}
public void setClassroom(List<String> classroom) {
classroom = this.classroom;
}
Java SearchSchool 对象:
public class SearchSchool {
private List<String> students;
private List<String> lessonsTaught;
public School() {}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
students = this.students;
}
public List<Stream> getLessonsTaught() {
return students;
}
public void setLessonsTaught(List<String> lessonsTaught) {
lessonsTaught = this.lessonsTaught;
}
Java 端点:
@RequestMapping(value="sampleurl/classroom", method = RequestMethod.POST)
public School(@RequestBody SearchSchool searchSchool) {
return service.getSchool(searchSchool);
}
如此有效,我使用 Java 中的 SearchSchool 对象来唯一标识学校并将其返回。但是,传递到端点的数组似乎与 SearchSchool 对象所需的列表不匹配(我在端点的条目上放置了一个断点,它甚至没有被执行)。稍微玩了一下代码,Angular 中学生的字符串数组与 Java 中学生的字符串列表的匹配似乎工作正常,问题似乎是将教授的课程数组与教授的课程列表相匹配在 Chrome 中的开发者控制台中给我以下运行时错误:
An error occurred syntaxError: service.ts: 163
Unexpected token A in JSON at position o
at JSON.parse (<anonymous>)
at Response.Body.json (http.ess.js:796)
at duration service.ts:54
at ZoneDelegate.invoke (zone.js:365)
at object.onInvoke (core.ess.js:4145)
at ZoneDelegate.invoke (zone.js:364)
at zone.run (zone.js:125)
at zone.js:760
at ZoneDelegate.invokeTask (zone.js:398)
at object.on InvokeTask (core.ess.js:4136)
at ZoneDelegate.invokeTask (zone.js:397)
at Zone.runTask (zone.js:165)
at drainMicroTaskQueue (zone.js:593)
at XMLHttpRequest. ZoneTask.invoke (zone.js:464)
和:
ERROR Error: Uncaught (in promise): core.es5.js:1085
Unexpected token A in JSON at position o
at resolvePromise (zone.js:683) [angular]
at :8080/gar-app/polyfis:7034:17 [angular)
at object.onInvokeTask (core.ess.js:4136) [angular]
有谁知道为什么从前端的数组匹配到后端的列表会导致这样的问题?
【问题讨论】:
-
在浏览器控制台检查请求,是请求还是响应无效的json?
-
console.log
res在返回<School>res.json()之前。您的回复可能与您的预期不同 -
@luk2302 请求似乎根本不包含 JSON
标签: javascript java arrays json angular