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> 
相关推荐
峥嵘life4 小时前
Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结
android·开发语言·人工智能·php
M-Robots echo4 小时前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
不可求~5 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
mldong6 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
mqiqe7 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一517 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依
gugucoding7 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
Nebula_g8 小时前
JavaSE基础语法:面向对象高级(代码中的成分)
java·开发语言·编程·javase·技术栈·高级语法
for_ever_love__8 小时前
python基础语法学习: 异常的传递性
开发语言·python·学习
AC赳赳老秦8 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw