Конечная точка Google возвращает JSON для длинного типа данных в кавычках

Я использую конечную точку облака Google для службы отдыха. Я использую эти данные в веб-клиенте GWT, используя RestyGWT.

Я заметил, что конечная точка облака автоматически заключает длинный тип данных в двойные кавычки, что вызывает исключение в RestyGWT, когда я пытаюсь преобразовать JSON в POJO.

Вот мой пример кода.

@Api(name = "test")
public class EndpointAPI {

@ApiMethod(httpMethod = HttpMethod.GET,  path = "test")
public Container test() {
    Container container = new Container();

    container.testLong =  (long)3234345;
    container.testDate = new Date();
    container.testString = "sathya";
    container.testDouble = 123.98;
    container.testInt = 123;                
    return container;
}
public class Container {
    public long testLong;
    public Date testDate;
    public String testString;
    public double testDouble;
    public int testInt;
}

}

Это то, что возвращается в виде JSON конечной точкой облака. Вы можете видеть, что testLong сериализуется как «3234345», а не как 3234345.

введите здесь описание изображения

У меня есть следующие вопросы. (1) Как удалить двойные кавычки в длинных значениях? (2) Как изменить формат строки на «гггг-МММ-дд чч:мм:сс»?

С уважением, Сатья


person Sathya    schedule 11.04.2013    source источник
comment
Вы не хотите удалять кавычки: не все длинные значения могут быть выражены как число JS, и RestyGWT, вероятно, анализирует JSON в объект JS (JSON.parse() или eval()). Нет, на самом деле вы хотите, чтобы RestyGWT правильно использовал Long.parseLong() (не знаю, как это сделать, если вообще возможно; я не знаю RestyGWT). Что касается даты, почему вы хотите не использовать стандартный формат?   -  person Thomas Broyer    schedule 11.04.2013
comment
Спасибо. Я пока не смог найти способ, как заставить restygwt правильно анализировать долго. Та же проблема с форматами даты - restygwt выдает исключение при десериализации.   -  person Sathya    schedule 11.04.2013


Ответы (1)


Какую версию restyGWT вы используете? Вы пробовали снапшот 1.4? Я думаю, что это код (1.4), отвечающий за разбор длинного в restygwt, он может вам помочь:

 public static final AbstractJsonEncoderDecoder<Long> LONG = new AbstractJsonEncoderDecoder<Long>() {

    public Long decode(JSONValue value) throws DecodingException {
        if (value == null || value.isNull() != null) {
            return null;
        }
        return (long) toDouble(value);
    }

    public JSONValue encode(Long value) throws EncodingException {
        return (value == null) ? getNullType() : new JSONNumber(value);
    }
};

 static public double toDouble(JSONValue value) {
    JSONNumber number = value.isNumber();
    if (number == null) {
        JSONString val = value.isString();
        if (val != null){
            try {
                return Double.parseDouble(val.stringValue());
            }
            catch(NumberFormatException e){
                // just through exception below
            }
        }
        throw new DecodingException("Expected a json number, but was given: " + value);
    }
    return number.doubleValue();
}
person Ronan Quillevere    schedule 23.05.2013