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

幻夢星雲
发布: 2025-10-27 21:56:02
原创
871人浏览过
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)中注册视图解析器:

存了个图
存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图17
查看详情 存了个图
<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自动转换,但在需要精细控制视图行为时,这种方案依然有价值。

以上就是Spring MVC怎么配置XML视图解析器_Spring MVC集成XmlViewResolver实践的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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