0 0

spring mvc 使用XStream返回xml下划线问题5

小弟今天用Spring mvc XStream 返回xml数据,发现给返回的pojo对象修改别名(改成有别名中有"_")的问题:

返回的POJO对象:


返回到前端的XML数据:



按道理graphicId应该是以grapic_id作为名称,但是实际返回的是grapic__id两个下划线,这个问题如何解决,大家帮忙。感谢
2013年4月20日 00:56
  • 大小: 32.9 KB
  • 大小: 20.9 KB

2个答案 按时间排序 按投票排序

0 0

采纳的答案

Why do field names suddenly have double underscores in the generated XML?

XStream maps Java class names and field names to XML tags or attributes. Unfortunately this mapping cannot be 1:1, since some characters used for identifiers in Java are invalid in XML names. Therefore XStream uses an XmlFriendlyNameCoder to replace these characters with a replacement. By default this NameCoder uses an underscore as escape character and has therefore to escape the underscore itself also. You may provide a different configured instance of the XmlFriendlyNameCoder or a complete different implementation like the NoNameCoder to prevent name coding at all. However it is your responsibility then to ensure, that the resulting names are valid for XML.

http://xstream.codehaus.org/faq.html


1、1.4及以后
<bean id="marshaller" class="org.springframework.oxm.xstream.AnnotationXStreamMarshaller">
        <property name="streamDriver">
            <bean class="com.thoughtworks.xstream.io.xml.StaxDriver">
                <constructor-arg>
                    <bean class="com.thoughtworks.xstream.io.naming.NoNameCoder()">
                    </bean>
                </constructor-arg>
            </bean>
        </property>
    </bean>

2、1.4之前

    <bean id="marshaller" class="org.springframework.oxm.xstream.AnnotationXStreamMarshaller">
        <property name="streamDriver">
            <bean class="com.thoughtworks.xstream.io.xml.XppDriver">
                <constructor-arg>
                    <bean class="com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer">
                        <constructor-arg index="0" value="_-"/>
                        <constructor-arg index="1" value="_"/>
                    </bean>
                </constructor-arg>
            </bean>
        </property>
    </bean>


3、注册到spring mvc
<mvc:annotation-driven>
  <mvc:message-converters>
      <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<property name="marshaller" ref="marshaller" />
<property name="unmarshaller" ref="marshaller" />
</bean>
  </mvc:message-converters>
</mvc:annotation-driven>

2013年4月20日 08:39
0 0

因为XStream用下划线当转义符。
你恐怕得自定义个NameCoder

参考

官方:http://xstream.codehaus.org/faq.html
stackoverflow:
http://stackoverflow.com/questions/9800494/xstream-double-underline-handling-java

2013年4月20日 08:32

相关推荐

Global site tag (gtag.js) - Google Analytics