Angular 为嵌套JSON数据创建角度模型
我需要使用httpclient创建一个简单的crud 如何正确获取此嵌套json的请求数据 JSON 服务 模型 组件技术 我尝试了这种方法,但我的请求返回了一个未定义的对象。您的结果可能不是json主体,而是整个响应对象,因此它不包含资源属性。要从响应中检索正文,需要调用json方法:Angular 为嵌套JSON数据创建角度模型,angular,typescript,model,Angular,Typescript,Model,我需要使用httpclient创建一个简单的crud 如何正确获取此嵌套json的请求数据 JSON 服务 模型 组件技术 我尝试了这种方法,但我的请求返回了一个未定义的对象。您的结果可能不是json主体,而是整个响应对象,因此它不包含资源属性。要从响应中检索正文,需要调用json方法: 您的API看起来很奇怪,但可能只是一个解释问题。它作为一种响应是有意义的,其中错误和消息在有效负载中,而不是post,如果是这样的话,@krystianpe给出的答案是正确的,我必须补充一点,如果使用新的Htt
您的API看起来很奇怪,但可能只是一个解释问题。它作为一种响应是有意义的,其中错误和消息在有效负载中,而不是post,如果是这样的话,@krystianpe给出的答案是正确的,我必须补充一点,如果使用新的HttpClient,那么json映射将自动完成,前提是angular能够确定这是一个json响应类型:来自服务器的application/json头或类似类型 无论如何,我将以一种我认为更好的惯用REST API的方式快速解释: 创建新计划 职位: 正文:{ 日期:2018-03-28:11:30:00, 观察:创建一个新的时间表, 地点:卡车车库 } 返回所有活动计划 获取: 如果需要过滤器,您有两个选项: 最简单的方法是传递参数:例如。使用参数 为从未见过的更复杂或更抽象的东西创建请求头。使用HttpHeaders 编辑计划: PUT:/api/schedule/1 正文:{ 日期:2018-03-28:11:30:00, 观察:新的观察, 地点:新地点 } 您有两个选择: 1.传递整个对象并更新所有属性 2.仅传递正在更改的属性 删除操作非常简单 删除:/api/1 如果您需要确定哪辆卡车有时间表,请将时间表放在有效负载车身上:{ 日期:2018-03-28:11:30:00, 观察:新的观察, 地点:新地点, 卡车识别号:1 } 开始/停止一个计划,这是你的主要问题,我认为,你有更多的灵活性。以下是一些方法: PUT:/api/schedule/1/start PUT:/api/计划/1/停止 PUT:/api/schedule/1/actions 正文:{state:start,when:now} PUT表示您正在以某种方式更新系统的状态。但这看起来像是您与开始对象或操作对象有关系,并且正在改变这一点。所以我更喜欢: PUT/POST/GET:/api/schedule/1/actions/start 使用PUT表示动作是幂等的,这是一个混淆词,它只改变时间表,没有其他副作用。我认为是这样的。 使用POST指示一个不是幂等的动作,其副作用未知或影响他人。 使用GET调用仅准备就绪且在系统中没有副作用的操作,例如发送电子邮件 您可以也应该在主体中传递参数。在本例中,您正在配置开始参数,但从GET开始没有意义,请使用urlparms 这将在中进行更详细的解释
stackoverflow中有一个讨论:在服务使用映射中更改响应
get(id: number){
return this.http.get(environment.apiUrl + id + "/stopschedule")
.map(response=>response.resource); //NOT return response, just response.resource
.catch(this.errorHandler);
}
如果您使用的是HttpClient API,我建议您将模型更改为以下内容:
class ServerResponse<T> {
resource: T;
errors: string;
message: string;
}
class Travel {
date: Date;
place: string;
observation: string;
}
export class Travel {
date: Date;
place: string;
observation: string;
}
export class ResponseDetails {
errors:string;
message : string;
}
import { Travel} from './travel';
export class Response extends ResponseDetails{
travel : Travel;
}
//Get data
this.getData = this.travelService.get(this.id)
.subscribe(result => this.data = result['resource'], result => this.erro = true);
this.getData = this.travelService.get(this.id)
.map(response => response.json())
.subscribe(result => this.data = result['resource'], result => this.erro = true);
get(id: number){
return this.http.get(environment.apiUrl + id + "/stopschedule")
.map(response=>response.resource); //NOT return response, just response.resource
.catch(this.errorHandler);
}
class ServerResponse<T> {
resource: T;
errors: string;
message: string;
}
class Travel {
date: Date;
place: string;
observation: string;
}
get(id: number): Observable<ServerResponse<Travel>>{
return this.http.get<ServerResponse<Travel>>(`${environment.apiUrl}${id}/stopschedule`);
}
this.getData = this.travelService.get(this.id)
.subscribe(
result => this.data = result.resource,
() => this.erro = true
);