2013-02-15 54 views
2

我想使用JQuery将位置数组发送到REST服务。如何使用POST将数组发送到REST服务(泽西岛)

我的代码

var locations = new Array(); 
var loc = new Location(); 
loc.alt = 0; 
loc.lat = 0; 
loc.long = 0; 
loc.time = 1; 

locations.push(loc); 

var json_data = {value : JSON.stringify(locations)}; 
console.log(json_data); 

$.ajax({type: 'POST', 
     url: rootURL + '/Location/123', 
     crossDomain: true, 
     dataType: "json", // data type of response 
     contentType: "application/json; charset=utf-8", 
     data: json_data, 
     success: function(data, textStatus, jqXHR) { 
      console.log('testAddLocations erfolgreich'); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      console.log('testAddLocations Fehler'); 
     } 
    }); 

REST的服务

@POST 
@Produces({ MediaType.APPLICATION_JSON }) 
@Path("{tripID}") 
public Response addLocations(@PathParam("tripID") final String tripID, Location[] value) { 

,但我得到一个HTTP-500错误。在服务器上:

SCHWERWIEGEND: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container 
JsonFormatException{text=v, line=1, column=1} 
at com.sun.jersey.json.impl.reader.JsonLexer.yylex(JsonLexer.java:662) 
at com.sun.jersey.json.impl.reader.JsonXmlStreamReader.nextToken(JsonXmlStreamReader.java:162) 

回答

0

我猜想这是因为格式的你发送的数据应该不是数据后,你是整个字符串化JSON? (包括value通常情况下应该location?)

我的意思是,泽西使用不同JSON notations序列化/反序列化消息,因此例如,如果你使用映射表示法的,你应该向这样的:

{"location":[ 
    {"alt":1,"lat":2,"long":3,"time":4}, 
    {"alt":5,"lat":6,"long":7,"time":8} 
]} 

这是指这样的代码使用jQuery:

$.ajax({ 
    data : JSON.stringify( 
    {"location" : [ 
     { alt: 1, lat: 2, long: 3, time: 4 }, 
     { alt: 5, lat: 6, long: 7, time: 8 } 
    ]}), 
    .... 

一个自然的符号,你应该送:

[ 
    {"alt":1,"lat":2,"long":3,"time":4}, 
    {"alt":5,"lat":6,"long":7,"time":8} 
] 

这意味着类似的代码:

$.ajax({ 
    data : JSON.stringify( 
    [ 
     { alt: 1, lat: 2, long: 3, time: 4 }, 
     { alt: 5, lat: 6, long: 7, time: 8 } 
    ]), 
    ... 

快速路上看到的默认行为是添加到您的服务,看看它返回什么样的格式:

@GET 
@Produces({ MediaType.APPLICATION_JSON }) 
@Path("/testNotation") 
public Location[] getLocations() { 
    return new Location[] { new Location(), new Location() }; 
} 

在这里看到一些额外信息:

http://jersey.java.net/nonav/documentation/latest/json.html
http://jersey.java.net/nonav/apidocs/1.17/jersey/com/sun/jersey/api/json/JSONConfiguration.html
http://jersey.java.net/nonav/apidocs/1.17/jersey/com/sun/jersey/api/json/JSONConfiguration.Notation.html
http://tugdualgrall.blogspot.ro/2011/09/jax-rs-jersey-and-single-element-arrays.html