groovy 速学 - 23 - Xml及 Json 的处理

目录

摘要

MarkupBuilder,StreamingMarkupBuilder,XmlParser,XmlSlurper,JsonBuilder

Xml 及 Json 的处理

Xml 的处理

创建 Xml
MarkupBuilder
def sw = new StringWriter()
def xml = new MarkupBuilder(sw)
xml.langs(type: "current") {
  language("Java")
  language("Groovy")
  language("JavaScript")
}

生成结果

<langs type='current'>
  <language>Java</language>
  <language>Groovy</language>
  <language>JavaScript</language>
</langs>
StreamingMarkupBuilder

比 MarkupBuilder 更强大,支持 CDATA,命名空间等的创建
并且只有当 bind() 被调用时,xml 才会被创建,所以可以先在多个线程中构建 xml 的结构。

def comment = "<![CDATA[<!-- address is new to this release -->]]>"
builder = new StreamingMarkupBuilder()
builder.encoding = "UTF-8"
def person = {
  mkp.xmlDeclaration()
  mkp.pi("xml-stylesheet": "type='text/xsl' href='myfile.xslt'")
  mkp.declareNamespace('': 'http://myDefaultNamespace')
  mkp.declareNamespac
### 配置 Jackson-dataformat-XML 返回 XML 数据 为了使应用程序能够通过 `jackson-dataformat-xml` 正确地返回 XML 格式的响应,需确保项目中包含了必要的依赖项,并正确配置了相应的模块。 #### 添加 Maven 或 Gradle 依赖 对于基于 Maven 的项目,在 pom.xml 文件内加入: ```xml <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.13.0</version> </dependency> <!-- 推荐使用的更高效的 Woodstox 实现 --> <dependency> <groupId>org.codehaus.woodstox</groupId> <artifactId>woodstox-core-asl</artifactId> <version>4.4.1</version> </dependency> ``` 而对于采用 Gradle 构建工具,则应在 build.gradle 中添加: ```groovy implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.0' implementation 'org.codehaus.woodstox:woodstox-core-asl:4.4.1' ``` #### 创建控制器方法来测试 XML 输出功能 下面展示了一个简单的 Spring MVC 控制器例子,该示例展示了如何利用上述提到的 `@JsonRootName`, `@JsonProperty` 和其他注解来自定义 XML 响应格式[^3]。 ```java @RestController @RequestMapping("/api/person") public class PersonController { @GetMapping(produces = MediaType.APPLICATION_XML_VALUE) public ResponseEntity<Person> getPerson() { var person = new Person( "John Doe", "JD", 30, "<CDATA[Some sensitive data]]>", LocalDate.of(1987, Month.JANUARY, 1)); return ResponseEntity.ok(person); } } ``` 在此基础上,如果希望进一步自定义序列化行为,比如改变默认命名空间前缀或是调整日期时间格式等细节设置,可以通过创建并注册一个定制化的 `XmlMapper` 来达成目标。这通常涉及到覆盖某些特定的方法或属性值以满足业务需求。 需要注意的是,当处理 GET 请求时,由于 URL 参数长度限制以及安全性考虑等因素的影响,推荐优先选用 POST 方法传递复杂对象作为请求体的一部分[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值