在我的服务器端,我有一个包含HashMap的Java对象。我想将它序列化为JSON,将其返回到我的Angular2客户端并将其用作那里的Map / Dictionary。
这是班级:
<expression-component>
app.registry.yourflowName.stop();
</expression-component>
}
这是我在客户端收到的JSON:
public class FileUploadResult {
String timestamp;
String message;
String status;
HashMap<String, String> parameters;
public FileUploadResult(String status, String message, String timestamp, HashMap parameters) {
this.status = status;
this.message = message;
this.timestamp = timestamp;
this.parameters = parameters;
}
这是我收到的Angular2 http电话:
{"timestamp":"","message":"Test","status":"1","parameters":{"myKey":"Value","mySecondKey":"Another Value"}}
客户端上的FileUploadResult如下所示:
this.http.post(this.uploadURL, formData).map((res:Response) => res.json() as FileUploadResult).catch(this.handleError);
使用&#34;作为FileUploadResult&#34;在http.map调用中,我希望得到一个可以调用export class FileUploadResult {
status: string;
timestamp: string;
message: string;
parameters: Map<string, string>;
constructor() {
this.parameters = new Map<string, string>();
}
addParameter(key: string, value: string) {
this.parameters.set(key, value);
}
getParameters() {
return this.parameters;
}
}
的对象。但那并没有发生。我得到一个未指定的对象,其中唯一有效的调用是result.getParameters().get("myKey")
。有没有办法实现我想要的,并将JSON对象转换为包含Angular2映射的FileUploadResult?
答案 0 :(得分:12)
调用res.json()
的结果是一个javascript对象,可以这样访问:
let json = res.json();
console.log(json["timestamp"]);
console.log(json.message);
在typescript中描述这样一个对象的方法是使用接口(或类型别名):
interface JsonResponse {
timestamp: string;
message: string;
status: string;
parameters: { [name: string]: string };
}
如果您想将此对象转换为您的类,您需要执行以下操作:
class FileUploadResult {
status: string;
timestamp: string;
message: string;
parameters: Map<string, string>;
constructor(json: JsonResponse) {
this.status = json.status;
this.timestamp = json.timestamp;
this.message = json.message;
this.parameters = new Map<string, string>();
Object.keys(json.parameters).forEach(key => {
this.addParameter(key, json.parameters[key]);
});
}
addParameter(key: string, value: string) {
this.parameters.set(key, value);
}
getParameters() {
return this.parameters;
}
}
答案 1 :(得分:1)
class FileUploadResult {
parameters: Record<string, string> = {};
addParameter(key: string, value: string) {
this.parameters[key] = value;
}
}
您可以通过这种方式使用
const abc = new FileUploadResult();
abc.addParameter('hi', 'hello');
console.log(abc.parameters); // will log {hi: "hello"}
https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt