如何从服务器端对象调用 javascript 对象的属性/方法
Posted
技术标签:
【中文标题】如何从服务器端对象调用 javascript 对象的属性/方法【英文标题】:How to call properties/methods of a javascript object from server side object 【发布时间】:2017-02-25 21:32:27 【问题描述】:我通常使用 C#、jQuery 2.x、Chrome 作为这样的浏览器从 restful 资源 Web Api 2 获取 js 对象
C#
public class Employee
private int id;
private string firstName;
private string lastName;
public int ID
get return this.id;
set this.id = value;
public string FirstName
get return this.firstName;
set this.firstName = value;
public string LastName
get return this.lastName;
set this.lastName = value;
public string FullName
get return this.firstName + " " + this.lastName;
我有一个这样的控制器
public class EmployeeController : ApiController
[HttpGet]
public Employee GetEmployee(int id)
return EmployeeService.Instance.GetEmployee(id);
然后在我的js中我这样调用资源
function getEmployee(id)
$.ajax(
type: "GET",
url: "localhost:8080/Employee/" + id,
success: bindEmployee
);
function bindEmployee(employee)
alert(employee.FullName);
Java
现在我想使用 Jersey 2.23、Java json 1.0、Tomcat 8 在 Java 中做同样的事情。所以我的班级 Employee
public class Employee
private int ID;
private string firstName;
private string lastName;
//regular getter and setter methods
public string getFullName()
return this.firstName + " " + this.lastName;
这是我宁静的资源
@Path("/employee")
public class EmployeeController
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getEmployee(@PathParam("id") long id) throws JSONException
Employee employee = new Employee();
employee.setId(id);
employee.setFirstName("john");
employee.setLastName("smith");
return Response.status(200).entity(employee).build();
我像这样用 angularjs 中的 $http 对象调用 restful 资源
return $http(
method : 'GET',
url : 'localhost:8080/employee/1',
).then(onSuccess, onError);
function onSuccess(response)
return response.data;
function onError(response)
//
响应数据是我的员工,但我只能看到私有成员,但我无法调用 getFullName 方法。不在 JSON 字符串中,它是一个 javascript 对象。
是否有在 javascript 中调用 getFullName 的解决方法?我想避免像这样 firstName + " "+ lastName 这样的客户端连接。
这是 Chrome 中开发者工具的输出。
【问题讨论】:
问题很不清楚。在哪里使用什么语言(客户端/服务器/浏览器)?无论语言如何,实际传输的 JSON 数据是否总是相同的,它是什么样的? 我更新了我的问题。 顺便说一句,为什么要关闭投票。用户可以好心解释一下原因吗? 您是否阅读了Jersey document about JSON,其中指定了如何控制 POJO 映射到 JSON 的方式?它有您正在寻找的答案,就像大多数文档一样。 【参考方案1】:在您的情况下,Java 对象被序列化为 JSON 以通过线路发送到浏览器,但 fullName 字段没有与对象一起序列化。虽然 javascript 无法访问 getFullName 方法,但您可以序列化任意字段,例如在 Java 端包含 fullName 字段。我不知道您在 Jersey 中使用的是什么序列化库,但如果您使用的是 Jackson,您可以简单地将方法注释为 JSON 属性:
@JsonProperty("fullName")
public string getFullName()
return this.firstName + " " + this.lastName;
您还可以使用 Moesif 和 Fiddler 等工具查看通过网络传输的有效负载。
【讨论】:
请在回答中明确提及您与 Moesif 的关系;否则,它可能被视为垃圾邮件。详情请参阅the help center here。谢谢。【参考方案2】:在 c# 中,您的 GetFullName 是一个属性。 在 Java 中,它是一个函数。
JSON 仅序列化属性。如果您希望您的 Java 对象序列化 FullName,您必须将其转换为属性或对其进行注释。
【讨论】:
你有一些代码要显示吗?感谢edit,你能做到吗? @Derrick 在上面发布了代码。这可以解决问题。唯一的问题是,没有二传手。但既然你不会设置属性服务器端它应该没问题。以上是关于如何从服务器端对象调用 javascript 对象的属性/方法的主要内容,如果未能解决你的问题,请参考以下文章
使用服务器端语言作为 Javascript 的 JSONP 调用
我可以通过 ASP.NET 将对象从客户端 javascript 发送到服务器端代码吗?
如何从JSP页面调用RestFul Webservice并使用JSON对象?