我通常使用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中开发人员工具的输出。
答案 0 :(得分:0)
在您的情况下,Java对象被序列化为JSON以通过线路发送到浏览器,但fullName字段未与对象序列化。虽然javascript无法访问方法getFullName,但您可以序列化任意字段,例如在Java端包含fullName字段。我无法告诉您使用Jersey的序列化库,但如果您使用的是Jackson,则可以简单地将该方法注释为JSON属性:
@JsonProperty("fullName")
public string getFullName() {
return this.firstName + " " + this.lastName;
}
你也可以使用像Moesif和Fiddler这样的工具来查看通过网络传输的有效负载。