如何从服务器端对象调用javascript对象的属性/方法

时间:2016-10-17 01:18:24

标签: javascript java c# jquery angularjs

我通常使用C#,jQuery 2.x,Chrome浏览器作为浏览器从宁静的资源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 2.23,Java json 1.0,Tomcat 8在Java中做同样的事情。所以我的班级员工

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中开发人员工具的输出。

enter image description here

1 个答案:

答案 0 :(得分:0)

在您的情况下,Java对象被序列化为JSON以通过线路发送到浏览器,但fullName字段未与对象序列化。虽然javascript无法访问方法getFullName,但您可以序列化任意字段,例如在Java端包含fullName字段。我无法告诉您使用Jersey的序列化库,但如果您使用的是Jackson,则可以简单地将该方法注释为JSON属性:

@JsonProperty("fullName")   
public string getFullName() {
    return this.firstName + " " + this.lastName;   
}

你也可以使用像Moesif和Fiddler这样的工具来查看通过网络传输的有效负载。