gpt4 book ai didi

java - 有没有办法在 JavaScript 代码中找到某个 Java 类的 "expect"实例?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:06 24 4
gpt4 key购买 nike

假设我在 Java 中有 Foo.class:

public class Foo {
public int id;
public String data;
}

我在 JavaScript 中有 Foo“类”:

function Foo(id, data) {
this.id = id;
this.data = data;
}

另外,假设我有 Java Controller 返回 Foo.class 的实例作为对 REST 请求的响应。在我的 JavaScript (AngularJS) 代码中,请求发送为:

$http.get(url + 'bar/get-foo/')
.success(function (response) {
var foo = new Foo(response.id, response.data);
logger.info("SUCCESS: /get-foo");
})
.error(function (error_message) {
logger.error(error_message)
});

而且它有效。但是有没有办法避免将每个属性从响应传递给 Foo 构造函数(某种期望 Foo 对象,或将其转换为 Foo 对象)?

我尝试使用 Object.create(Foo, response) 但我得到了 TypeError: Property description must be an object: true

当然,总是有可能将 JavaScript 端的 Foo 构造函数重构为:

function Foo(foo) {
this.id = foo.id;
this.data = foo.data;
}

但是,这需要重构大部分代码库。

感谢您的宝贵时间。我很感激!

PS:对于那些想知道我为什么需要这个的人:这不是像 Foo 这样的小类的问题,但一些响应是更大类(有十几个字段)的实例,这不在我的控制之下.

编辑: 我接受了 Chichozell 的回答,仅仅是因为它需要的工作量最少。 Robin 和 jonnyknowsbest 的答案也有效(并且适用于纯 JavaScript,不像 Chichozell 的答案,它是特定于 AngularJS 的)。还没有尝试过 Laurentiu L. 的回答,但看起来它也应该有效。无论如何,这是一个解决方案(不是解决方案):

.success(function (response) {
var foo = new Foo();
angular.extend(foo, response); // angular.merge() for "deep-copy"
//...
}

非常感谢在此主题中回答/评论/编辑的所有人。

最佳答案

如果你想让你的 Java 继续思考 javascript,请尝试使用 angular.extend(),它将一个对象的属性“复制”到另一个对象

this = angular.extend(this, response)

在 foo 函数中,或直接在 Controller 上:

 Foo = angular.extend(Foo, response)

关于java - 有没有办法在 JavaScript 代码中找到某个 Java 类的 "expect"实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com