xstream, как скрыть скрытое имя поля класса, но отобразить значение поля (Java) - PullRequest
1 голос
/ 22 марта 2012

Я хочу получить такой вывод:

<MyObj>field value</MyObj>

Ниже приведен код Java для форматирования объекта MyObj. Я хочу скрыть поле в формате XML, но отображать значение поля.

public class MyObj {
    private String filed;

    public String getField() {
        return filed;
    }

    public void setField(String value) {
        this.filed = value;
    }

    public static void main(String[] args)
    {
        XStream xstream = new XStream(new DomDriver("UTF-8"));
        MyObj obj = new MyObj();
        obj.setField("field value");
        xstream.toXML(obj, System.out);
    }
}

Но вывод:

<MyObj>
  <filed>field value</filed>
</MyObj>

1 Ответ

3 голосов
/ 22 марта 2012

Это не невозможно. Но помните: это не соответствует философии библиотеки xstream, которая работает с bean-компонентами, которые обычно содержат более одного поля.

Вы можете использовать ToAttributedValueConverter.class

@XStreamConverter(value=ToAttributedValueConverter.class, strings={"filed"})

Используйте эту аннотацию перед объявлением класса.

На мой взгляд, лучше использовать что-то еще, например:

<MyObj filed="field value" />

Эту форму xml можно создать с помощью аннотаций @ XStreamAsAttribute

Пример кода:

public class MyObj {
    @XStreamAsAttribute
    private String filed;

    public String getField() {
        return filed;
    }

    public void setField(String value) {
        this.filed = value;
    }

    public static void main(String[] args)
    {
        XStream xstream = new XStream(new DomDriver("UTF-8"));
        MyObj obj = new MyObj();
        obj.setField("field value");
        xstream.toXML(obj, System.out);
    }
}

Преимущество этого решения заключается в том, что когда вам потребуется в будущем добавить больше полей, чем одного, вам не потребуется много для изменения формата xml.

Это также быстрее, потому что это решение не нуждается в преобразователе.

...