0

0

Spring MVC怎么配置XML视图解析器_Spring MVC集成XmlViewResolver实践

幻夢星雲

幻夢星雲

发布时间:2025-10-27 21:56:02

|

920人浏览过

|

来源于php中文网

原创

Spring MVC中可通过自定义XmlView继承AbstractView并结合JAXB实现XML视图渲染,需配置ContentNegotiatingViewResolver支持XML格式,配合BeanNameViewResolver和实体类JAXB注解,使控制器返回的模型数据以XML输出,适用于需视图控制的场景。

spring mvc怎么配置xml视图解析器_spring mvc集成xmlviewresolver实践

在Spring MVC中,如果需要返回XML格式的数据给客户端(如浏览器或API调用方),除了使用@ResponseBody直接输出XML内容外,还可以通过配置XmlViewResolver来实现视图级别的XML渲染。这种方式适合需要结构化视图管理、复用模板或与视图技术整合的场景。

启用XmlViewResolver的前提条件

Spring本身并不直接提供名为 XmlViewResolver 的标准视图解析器,但可以通过继承 AbstractView 并结合 JAXB 实现自定义XML视图功能。常见的做法是使用 ContentNegotiatingViewResolver 配合自定义XML视图类,实现对不同格式(如JSON、XML)的自动切换。

若你希望基于XML模板或对象自动序列化为XML响应,可以按以下方式配置:

步骤一:添加JAXB依赖(Java 11+需注意模块化)

如果你使用的是Java 8,JAXB已内置;Java 9及以上版本需显式引入:

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.1</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jaxb</groupId>
  <artifactId>jaxb-runtime</artifactId>
  <version>2.3.1</version>
</dependency>

步骤二:创建支持XML输出的视图类

编写一个继承 AbstractView 的类,用于将模型数据以XML格式输出:

public class XmlView extends AbstractView {

  @Override
  protected void renderMergedOutputModel(Map<String, Object> model,
      HttpServletRequest request, HttpServletResponse response)
      throws Exception {

    Object obj = model.get("content");
    if (obj == null) {
      response.setStatus(HttpServletResponse.SC_NO_CONTENT);
      return;
    }

    response.setContentType("application/xml;charset=UTF-8");
    JAXBContext context = JAXBContext.newInstance(obj.getClass());
    context.createMarshaller().marshal(obj, response.getOutputStream());
  }
}

步骤三:配置ViewResolver支持XML视图

在Spring MVC的配置文件(如 dispatcher-servlet.xml)中注册视图解析器:

Otter.ai
Otter.ai

一个自动的会议记录和笔记工具,会议内容生成和实时转录

下载
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  <property name="viewResolvers">
    <list>
      <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
    </list>
  </property>
  <property name="defaultViews">
    <list>
      <bean class="com.example.XmlView"/>
    </list>
  </property>
  <property name="mediaTypes">
    <map>
      <entry key="xml" value="application/xml"/>
      <entry key="json" value="application/json"/>
    </map>
  </property>
</bean>

同时确保开启 BeanNameViewResolver,它允许Spring根据bean名称查找视图实例。

步骤四:控制器返回视图名称

在Controller中返回逻辑视图名,并把要序列化的对象放入model:

@Controller
public class UserViewController {

  @GetMapping(value = "/user", produces = "application/xml")
  public String getUser(Model model) {
    User user = new User("zhangsan", 25);
    model.addAttribute("content", user);
    return "xmlView"; // 对应XmlView的bean名称
  }
}

记得在Spring上下文中注册该视图bean:

<bean id="xmlView" class="com.example.XmlView"/>

实体类添加JAXB注解

确保你的Java对象支持JAXB序列化:

@XmlRootElement(name = "user")
public class User {
  private String name;
  private int age;

  public User() {}
  public User(String name, int age) { this.name = name; this.age = age; }

  @XmlElement
  public String getName() { return name; }
  public void setName(String name) { this.name = name; }

  @XmlElement
  public int getAge() { return age; }
  public void setAge(int age) { this.age = age; }
}

访问 /user.xml 或设置Accept头为 application/xml 即可看到XML输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
  <age>25</age>
  <name>zhangsan</name>
</user>
基本上就这些。通过上述配置,你已经实现了Spring MVC中基于XML的视图渲染机制。虽然实际项目中更多使用@RestController + @ResponseBody自动转换,但在需要精细控制视图行为时,这种方案依然有价值。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

161

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

89

2026.01.26

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

servlet生命周期
servlet生命周期

Servlet生命周期是指Servlet从创建到销毁的整个过程。本专题为大家提供servlet生命周期的各类文章,大家可以免费体验。

393

2023.08.08

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1051

2023.08.02

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.3万人学习

Java 教程
Java 教程

共578课时 | 81.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号