有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript无法将数据从Angular应用程序发布到播放!框架

我从浏览器调试器中收到以下错误:

Origin http://localhost:8000 not found in Access-Control-Allow-Origin header.

但是,我已经在我的API中的Global.java文件中设置了头:

全球。java

@Override
public Promise<SimpleResult> call(Http.Context ctx) throws java.lang.Throwable {
    Promise<SimpleResult> result = this.delegate.call(ctx);
    Http.Response response = ctx.response();
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setContentType("application/json");
    return result;
}

这是我的API路线,我正在打

路线

POST        /api/users/insertuser                      @controllers.UserController.insertUser

以下是控制器方法:

用户控制器。java

@BodyParser.Of(BodyParser.Json.class)
public Result insertUser() {
    JsonNode json = request().body().asJson();
    String email = json.findPath("email").asText();
    String username = json.findPath("username").asText();
    String password = json.findPath("password").asText();
    if(email == null || username == null || password == null) {
      return badRequest("Missing parameter[s]");
    } else {
        User user = new User(username, email, false, password, getDate(), getDate());
        repo.insertUser(user);
        return getUserByEmail(email);
    }
}

以下是我的Angular应用程序的API调用:

userapiservice。js

var factory = {};
var baseUrl = 'http://127.0.0.1:9000/api/users/';

factory.insertUser = function (user) {
  return $http({
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    url: baseUrl + 'insertuser/',
    params: { username: user.username, email: user.email, password: user.password }
  });
};

我有什么遗漏/做错了吗?在几个浏览器上试用过,已经在上面呆了大约一个星期了,我一直在自学,我找到了剧本!文件将。。。好的


共 (1) 个答案

  1. # 1 楼答案

    首先添加飞行前请求

    OPTIONS   /*all                                     controllers.Application.preflight(all)
    

    public static Result preflight(String all) {
        response().setHeader("Access-Control-Allow-Origin", "*");
        response().setHeader("Allow", "*");
        response().setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS, PATCH");
        response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent, access_token, mode");
        return ok();
    }
    

    但是记住

    @Override
        public Promise<SimpleResult> call(Http.Context ctx) throws java.lang.Throwable {
            Promise<SimpleResult> result = this.delegate.call(ctx);
            Http.Response response = ctx.response();
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setContentType("application/json");
            return result;
        }
    

    内部服务器错误时调用不起作用