意外的输入结束:OBJECT的预期关闭标记

时间:2014-08-27 11:59:21

标签: java google-app-engine search jackson geopoints

我正在尝试在我的应用引擎应用中创建一个地理位置但是当我尝试反序列化它时,我收到了这个令人讨厌的消息:

Uncaught exception from servlet
org.codehaus.jackson.JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (from [Source: java.io.StringReader@1a21658; line: 1, column: 0]).

这是我的JSON代码:

{
    "id": 31,
    "name": "pepe",
    "mail": "p@p.com",
    "password": 123,
    "age":10,
    "birthday": "01-06-1991",
    "desc" : " bla bla",
    "gp": {
     "latitude": 64.124596,
     "longitude": -147.8632
     }
}

这是geopoint和我的自定义反序列化方法的声明:

GeoPoint gp;

public GeoPoint getGp() {
    return gp;
}

@JsonDeserialize(using = CustomGeoPintDeserializer.class)
public void setGp(GeoPoint gp) {
    this.gp = gp;
}

public  class CustomGeoPintDeserializer extends JsonDeserializer<GeoPoint> {

    @Override
    public GeoPoint deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {

        System.out.println("ENTRA");
        ObjectMapper mapper = new ObjectMapper();
        JsonNode actualObj = mapper.readValue(jsonParser.getText(), JsonNode.class);

        double latitude = actualObj.get("latitude").getDoubleValue();

        double longitude = actualObj.get("longitude").getDoubleValue();


        return new GeoPoint(latitude,longitude);
    }
}

2 个答案:

答案 0 :(得分:1)

您的GeoPoint类看起来像这样的构造函数:public GeoPoint(double latitude, double longitude)。在这种情况下,我们可以使用MixIn feature。我们必须创建其他抽象类,我们将在其中提供POJOJSON之间的映射。

abstract class GeoPointMixIn {

    GeoPointMixIn(@JsonProperty("latitude") double latitude, @JsonProperty("longitude") double longitude) {

    }
}

简单用法:

ObjectMapper mapper = new ObjectMapper();
mapper.addMixInAnnotations(GeoPoint.class, GeoPointMixIn.class);

System.out.println(mapper.readValue(JSON, YourRootPojo.class));

如您所见,您不必为GeoPoint类实现自定义反序列化器。

答案 1 :(得分:1)

对我来说这是一个非常简单的解决方案。

我忘了在我的SwaggerUI请求中关闭括号:

{
    "jobGroup": "Authorizer-CCC",
    "jobName": "Authorizer-2NO5-101"