如何在 GET 请求中删除一些 XML 标签

How to delete some XML tags in a GET request


我想在浏览器上打印这样的东西:

<measureTypes>
    <measureType>weight</measureType>
    <measureType>height</measureType>
    <measureType>steps</measureType>
    <measureType>bloodpressure</measureType>
</measureTypes>

但我得到了这个输出:

<measureDefinitions>
    <measureDefinition>
        <measureName>weight</measureName>
    </measureDefinition>
    <measureDefinition>
        <measureName>height</measureName>
    </measureDefinition>
    <measureDefinition>
        <measureName>steps</measureName>
    </measureDefinition>
    <measureDefinition>
        <measureName>blood pressure</measureName>
    </measureDefinition>
    <measureDefinition>
        <measureName>heart rate</measureName>
    </measureDefinition>
    <measureDefinition>
        <measureName>bmi</measureName>
    </measureDefinition>
</measureDefinitions>

这是我的模型代码 class:

@NamedQuery(name="MeasureDefinition.findAll", query="SELECT m FROM MeasureDefinition m")
public static List<MeasureDefinition> getAll() {
    EntityManager em = LifeCoachDao.instance.createEntityManager();

    List<MeasureDefinition> list = em.createNamedQuery("MeasureDefinition.findAll",                    MeasureDefinition.class).getResultList();
    LifeCoachDao.instance.closeConnections(em);
    return list;
}

这是来自资源 class 的代码(这是我打印输出的地方):

@GET
@Produces({MediaType.TEXT_XML,  MediaType.APPLICATION_JSON ,  MediaType.APPLICATION_XML })
public List<MeasureDefinition> getMeasuresTypes() {
    EntityManager em = LifeCoachDao.instance.createEntityManager();
    System.out.println("Getting list of measures...");
    List<MeasureDefinition> measures = MeasureDefinition.getAll();
    System.out.println("Measures " + measures);
    System.out.println("Size of the list " + measures.size());
    return measures;
}

因此我的问题是:如何从输出中删除 <measureDefinition>?难道我做错了什么?

您可能需要围绕该列表创建一个客户包装器,然后执行以下操作:

@XmlRootElement(name = "measureTypes")
public class MessageDefinitionResult {

    @XmlElement(name = "measureType")
    @XmlJavaTypeAdapter(MeasureDefinitionXmlAdapter.class)
    private List<MeasureDefinition> measureDefinitions;

    public MessageDefinitionResult(final List<MeasureDefinition> measureDefinitions) {
        this.measureDefinitions = measureDefinitions;
    }

    public MessageDefinitionResult() { }

    public List<MeasureDefinition> getMeasureDefinitions() {
        return measureDefinitions;
    }

    public static final class MeasureDefinitionXmlAdapter extends XmlAdapter<String, MeasureDefinition> {

        @Override
        public MeasureDefinition unmarshal(final String v) throws Exception {
            return null; // or whatever
        }

        @Override
        public String marshal(final MeasureDefinition v) throws Exception {
            return v.getName();
        }
    }

}

.....

package de.zalando.shop.frontend.springmvc.controller.user.account;

/**
 * @author  mochieng (marembo.isaiah.ochieng@zalando.de)
 * @since   Nov 13, 2015
 */
public class MeasureDefinition {

    private String name;

    private String value;

    private String moreValuesAndProperties;

    public MeasureDefinition(final String name) {
        this.name = name;
    }

    public MeasureDefinition(final String name, final String value, final String moreValuesAndProperties) {
        this.name = name;
        this.value = value;
        this.moreValuesAndProperties = moreValuesAndProperties;
    }

    public MeasureDefinition() { }

    public String getName() {
        return name;
    }

    public String getValue() {
        return value;
    }

    public String getMoreValuesAndProperties() {
        return moreValuesAndProperties;
    }

}