通过 AJAX 发送 JSON 到 RESTful 服务(球衣)returns 空值
sending JSON via AJAX to RESTful Service (jersey) returns null values
很抱歉再次询问,但我找不到解决我的问题的方法 - 无论是在这里还是其他任何地方。我有一个使用球衣的 RESTful 服务器,它应该通过 ajax 从客户端消耗 JSON ....但它 returns 是一个空值。为什么??
休息:
@POST
@Path("/addPoint")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public WayPoint addPoint(@QueryParam("coordinate")String coordinate, @QueryParam("RouteId")Long RouteId) {
WayPoint waypoint = new WayPoint();
waypoint.setCoordinate(coordinate);
waypoint.setRouteId(RouteId);
System.out.println(waypoint);
return getEntityManager().merge(waypoint);
}
对象:
@Entity
@XmlRootElement
public class WayPoint {
@Id
@Column(nullable = false)
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
private String coordinate;
private Long RouteId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCoordinate() {
return coordinate;
}
public void setCoordinate(String coordinate) {
this.coordinate = coordinate;
}
public Long getRouteId() {
return RouteId;
}
public void setRouteId(Long routeId) {
this.RouteId = routeId;
}
}
和 AJAX 调用:
this.AddPoint = function(coords, routeid){
var test = JSON.stringify({ coordinate: coords, RouteId: routeid });
console.log(test);
$.ajax({
url: thePath,
type: "POST",
data: JSON.stringify({ coordinate: coords, RouteId: routeid }),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(response) {
alert("new point added!");
console.log(response);
},
error:function(res){
alert("Cannot save point! " + res.statusText);
}
});
};
我不明白...坐标和 RouteId 是 "null" 当我尝试以这种方式提取它们时(通过 @queryParam)
据我了解,您只能对 GET 请求使用 @QueryParam
。
对于 POSTs 你可以把你想要填充的对象作为方法参数,Jersey 会自动为你实例化它。
我认为您只需确保要实例化的对象具有适当的 getter 和 setter。
GET 示例:
@GET
@Path("logout")
@Produces(MediaType.APPLICATION_JSON)
public Response logout(@NotNull @QueryParam("user_id") int userId,
@NotNull @QueryParam("token") String token) {
一个POST例子:
@POST
@Path("register")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response register(RegisterUserParams registerUserParams) {
很抱歉再次询问,但我找不到解决我的问题的方法 - 无论是在这里还是其他任何地方。我有一个使用球衣的 RESTful 服务器,它应该通过 ajax 从客户端消耗 JSON ....但它 returns 是一个空值。为什么??
休息:
@POST
@Path("/addPoint")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public WayPoint addPoint(@QueryParam("coordinate")String coordinate, @QueryParam("RouteId")Long RouteId) {
WayPoint waypoint = new WayPoint();
waypoint.setCoordinate(coordinate);
waypoint.setRouteId(RouteId);
System.out.println(waypoint);
return getEntityManager().merge(waypoint);
}
对象:
@Entity
@XmlRootElement
public class WayPoint {
@Id
@Column(nullable = false)
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
private String coordinate;
private Long RouteId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCoordinate() {
return coordinate;
}
public void setCoordinate(String coordinate) {
this.coordinate = coordinate;
}
public Long getRouteId() {
return RouteId;
}
public void setRouteId(Long routeId) {
this.RouteId = routeId;
}
}
和 AJAX 调用:
this.AddPoint = function(coords, routeid){
var test = JSON.stringify({ coordinate: coords, RouteId: routeid });
console.log(test);
$.ajax({
url: thePath,
type: "POST",
data: JSON.stringify({ coordinate: coords, RouteId: routeid }),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(response) {
alert("new point added!");
console.log(response);
},
error:function(res){
alert("Cannot save point! " + res.statusText);
}
});
};
我不明白...坐标和 RouteId 是 "null" 当我尝试以这种方式提取它们时(通过 @queryParam)
据我了解,您只能对 GET 请求使用 @QueryParam
。
对于 POSTs 你可以把你想要填充的对象作为方法参数,Jersey 会自动为你实例化它。
我认为您只需确保要实例化的对象具有适当的 getter 和 setter。
GET 示例:
@GET
@Path("logout")
@Produces(MediaType.APPLICATION_JSON)
public Response logout(@NotNull @QueryParam("user_id") int userId,
@NotNull @QueryParam("token") String token) {
一个POST例子:
@POST
@Path("register")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response register(RegisterUserParams registerUserParams) {