Java:XStream 下划线

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.

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>

<!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json /blog/1.xml -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
	<property name="ignoreAcceptHeader" value="true" />
	<property name="defaultContentType" value="application/json" />
	<!-- 扩展名至mimeType的映射,即 /blog.json => application/json -->
	<property name="mediaTypes">
		<map>
			<entry key="json" value="application/json" />
			<entry key="xml" value="application/xml" />
		</map>
	</property>
	<!-- 用于开启 /blog/123?format=json 的支持 -->
	<property name="favorParameter" value="false" />
	<property name="viewResolvers">
		<list>
			<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
			<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
				<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
				<property name="prefix" value="/pages" />
				<property name="suffix" value=".jsp"></property>
			</bean>
		</list>
	</property>
	<property name="defaultViews">
		<list>
			<bean  class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
				<property  name="extractValueFromSingleKeyModel" value="true" />
			</bean>
			<bean  class="org.springframework.web.servlet.view.xml.MarshallingView">
				<property name="marshaller">
					<bean  class="org.springframework.oxm.xstream.XStreamMarshaller">
						<property name="autodetectAnnotations" value="true"/>
						<!-- 针对bean中下划线处理 -->
						<property name="streamDriver">
							<bean class="com.thoughtworks.xstream.io.xml.StaxDriver">
								<constructor-arg>
									<bean class="com.thoughtworks.xstream.io.naming.NoNameCoder" />
								</constructor-arg>
							</bean>
						</property>
					</bean>
				</property>
			</bean>
		</list>
	</property>
</bean> 
相关推荐
Slow菜鸟12 小时前
Java开发规范(十一)| 数据全生命周期治理规范—Java应用的“数据资产化手册”
java·servlet·oracle
丸码12 小时前
Java异常体系全解析
java·开发语言
v***885612 小时前
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
java·spring boot·后端
q***494512 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
q***721912 小时前
PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
开发语言·redis·php
k***825112 小时前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
IMPYLH12 小时前
Lua 的 require 函数
java·开发语言·笔记·后端·junit·lua
曾经的三心草12 小时前
基于正倒排索引的Java文档搜索引擎1-实现索引模块-实现Parser类
java·开发语言·搜索引擎
q***016512 小时前
Python爬虫完整代码拿走不谢
开发语言·爬虫·python
vx_bscxy32212 小时前
告别毕设焦虑!Python 爬虫 + Java 系统 + 数据大屏,含详细开发文档 基于web的图书管理系统74010 (上万套实战教程,赠送源码)
java·前端·课程设计