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> 
相关推荐
圆山猫2 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
微学AI3 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管3 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨3 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡3 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖4 小时前
Java深入解析篇九之NIO详解
java·网络·nio
韭菜炒鸡肝天4 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
The Chosen One9854 小时前
高进度算法模板速记(待完善)
java·前端·算法
Aaron - Wistron5 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
Dxy12393102166 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python