我目前正在使用Angular和Jersey Restservice来处理http请求。
Restservice在9090端口上运行
我在jersey restservice中的POST路线如下:
@Path("/test")
public class ResourceService {
@POST
@Path("label")
@Consumes({ "application/json" })
@Produces(MediaType.APPLICATION_JSON)
public Response label(String param) {
System.out.println("called");
System.out.println(param);
// do anything...
}
}
我的Http请求本身呈角度形式:
private baseUrl: string = "http://localhost:9090"
getLabels():Observable<any> {
var tempObj= {
"a":"aa",
"b":"bb",
"c":"cc",
"d":"dd"
};
return this.http.post(this.baseUrl+"/test/label",tempObj).pipe(
catchError(this.handleError)
);
}
当我执行包含JSON的Post请求时,label方法永远不会被调用,并且在web-develop-console中出现以下错误
Access to XMLHttpRequest at 'http://localhost:9090/test/label' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
但是,当我传递null而不是tempObj时,Post Request似乎是正确的,并且调用了我的rest服务上的方法。为什么我的休息服务不接受有效的json?
Edit:在其余服务中将“ application / json”更改为“ text / plain”并传递有角度的JSON.stringify而不是Object时,它也将正常工作。似乎“ application / json”有问题?我必须在某个地方启用它吗?