настройка сериализации наборов Java с помощью xstream

По-моему, лучше сделать часть номера версии самого файла, например, myscript.1.2.3.js. Можно установить веб-сервер, чтобы кэшировать этот файл навсегда, и просто добавить новый js файл, когда у Вас есть новая версия.

11
задан Will Goring 24 November 2009 в 16:24
поделиться

3 ответа

Я бы предложил изменить List на List , где Tag - это объект домена, который по сути просто содержит Строка. Затем вы говорите:

xstream.alias("tag", org.goring.Tag.class);

и получаете именно то, что хотите. Это позволяет избежать использования собственного конвертера.

5
ответ дан 3 December 2019 в 05:58
поделиться

Ради интереса я попробовал сделать это без написания собственного конвертера. Обычно я просто регистрирую специальную версию CollectionConverter с инструкциями для определенного поля в определенном классе.

Соответствующий фрагмент:

ClassAliasingMapper mapper = new ClassAliasingMapper(xstream.getMapper());
mapper.addClassAlias("tag", String.class);
xstream.registerLocalConverter(
    Test.class,
    "tags",
    new CollectionConverter(mapper)
);

Полноценный пример:

import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.converters.collections.*;
import com.thoughtworks.xstream.mapper.*;
import java.util.*;

public class Test {
    public List<String> tags = new ArrayList<String>();
    public List<String> notags = new ArrayList<String>();
    public Test(String tag, String tag2) {
        tags.add(tag); tags.add(tag2);
        notags.add(tag); notags.add(tag2);
    }
    public static void main(String[] args) {
        Test test = new Test("foo", "bar");
        XStream xstream = new XStream();

        ClassAliasingMapper mapper = new ClassAliasingMapper(xstream.getMapper());
        mapper.addClassAlias("tag", String.class);
        xstream.registerLocalConverter(
            Test.class,
            "tags",
            new CollectionConverter(mapper)
        );

        System.out.println(xstream.toXML(test));
    }
}

Не тестировалось, но это должно работать. Нет?

xstream.alias("tag", java.lang.String.class);
12
ответ дан 3 December 2019 в 05:58
поделиться

Добавьте псевдоним для класса java.util.String . Хорошо, это может сломать что-то еще где-то еще, но в данном случае этого должно быть достаточно.

Если вы не хотите делать то, что описано выше, вы можете сделать свои собственные преобразователи ( см. Это удобное руководство ), который поможет вам достичь вашей цели. И не бойтесь сделать свой собственный конвертер, их действительно легко реализовать.

1
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: