我正在创建一个java web应用程序,使用控制器侧的servlet和前端的角.这个应用程序使用javamail从电子邮件帐户(如gmail)获取电子邮件,然后以json格式返回它们。这些都是我做的..。我可以用servlet以json格式返回电子邮件,但我的问题是我不能用角显示它们。我试着用这个网站"http://jsonplaceholder.typicode.com/users“测试我的代码,用json测试我的角度,它带来了所有的数据,但是当我修改它,用我的应用程序尝试它时,它没有带来任何东西。下面是我的应用程序中json数据的一个例子。

这就是打印这些数据的servlet代码:
// TODO Auto-generated method stub
doGet(request, response);
EmailAccount emailaccount= new EmailAccount("myemail@gmail.com","HardPas$$word!@");
EmailServices read = new EmailServices();
ArrayList<Email> emails = new ArrayList<Email>();
emails = read.readEmail(emailaccount);
String json = new Gson().toJson(emails.get(2));
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
} 这是角度上的代码来获取json数据并显示出来:
html
<form action="http://127.0.0.1:8080/oneBox/ReadEmail" method="POST" (submit)="onSubmit()">
<input type="submit" value="submit">
</form>
<ul >
<li>
{{users.id}}
</li>
<li>
{{users.title}} ---- {{users.from}}
</li>
<li>
{{users.to}}
</li>
</ul> 构成部分:
import { Component, OnInit } from '@angular/core';
import { MyServiceService } from '../../services/my-service.service';
import {EmailModel} from '../../models/user.model'
@Component({
selector: 'app-my-compo',
templateUrl: './my-compo.component.html',
styleUrls: ['./my-compo.component.css']
})
export class MyCompoComponent implements OnInit {
users:EmailModel;
constructor(public service:MyServiceService) {
}
onSubmit(){
this.service.getUsers().subscribe(
users => {this.users=users;});
}
ngOnInit(): void {
}
}我的服务代码是:
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import {map, catchError} from "rxjs/operators";
import { Observable, throwError } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class MyServiceService {
url="http://127.0.0.1:8080/oneBox/ReadEmail";
getUsers():Observable<any>{
return this.http.get(this.url)
.pipe(map(res => res.json()));
}
constructor(public http: Http) { }
}因此,我的问题是,我如何从本地服务器获取这些json数据,并使用角打印它?
发布于 2020-04-03 11:15:47
您的后端似乎运行良好,因为您从Java端获得了正确的JSON响应。
在您的服务类中尝试以下操作:
getUsers(): Observable<any>{
return this.http.get<any>(this.url);
}在组件控制器中添加错误回调并记录两个字段的结果,然后在注释中提供结果:
onSubmit(){
this.service.getUsers().subscribe(
users => {
console.log(users);
this.users=users;
},
error => {
console.log(error);
});
}此外,我认为在POST和GET请求之间存在一种误解,因为我在您的形式中看到了这一点。删除表单中的method和action属性,因为在角度上这不会产生任何影响。您可以使用(submit)事件提交表单,这样就足够了。
最后但并非最不重要的是,你在后台考虑过CORS政策吗?这是前端/后端分离的问题,因为后端只允许来自同一个IP和端口的请求,因此不允许您的角度前端请求。这可能对你有帮助:https://howtodoinjava.com/servlets/java-cors-filter-example/
https://stackoverflow.com/questions/61009295
复制相似问题